プログラミング問題でスキルレベルを評価、転職するサイトのpaizaでオンライン参加型のイベント「paizaオンラインハッカソン4 Lite」が開催されたので、投稿してみました。
公式に投稿コードを公開してもOKということだったので、せっかくなのでブログにまとめました。
1,2問目はそのまま条件に総和を出すようにしています。
3問目は合計値を逐次更新していき、最大値を出力するようにしました。もう少し高速化の手法がありそうな気はしましたが(このイベント、毎回計測表示限界の0.01秒で出してる人いますし) 、とりあえず実行時間的には問題なさそうだったので、以下のコードで提出してみました。
(そもそも、コード自体がもう少し整理できそう)
ソースコード
1問目
#include <iostream> | |
using namespace std; | |
int main(void){ | |
int n,ans=0; | |
cin>>n; | |
for(int i=0;i<n;i++) | |
{ | |
int tmp; | |
cin>>tmp; | |
ans+=tmp; | |
} | |
cout<<ans<<endl; | |
return 0; | |
} |
2問目
#include <iostream> | |
#include <algorithm> | |
using namespace std; | |
int main(void){ | |
int n,ans=0; | |
cin>>n; | |
for(int i=0;i<n;i++) | |
{ | |
int t,s,p; | |
cin>>t>>s>>p; | |
ans+=max(t-s,0)*p; | |
} | |
cout<<ans<<endl; | |
return 0; | |
} | |
3問目
#include <iostream> | |
#include <algorithm> | |
using namespace std; | |
int main(void){ | |
int t,n,ans=0; | |
cin>>t>>n; | |
int m[n+1]; | |
for(int i=0;i<t;i++) | |
{ | |
cin>>m[i]; | |
ans+=m[i]; | |
} | |
int now=ans; | |
for(int i=t;i<n;i++) | |
{ | |
cin>>m[i]; | |
now=now+m[i]-m[i-t]; | |
ans=max(ans,now); | |
} | |
cout<<ans<<endl; | |
return 0; | |
} | |
結果
実際にpaiza上に投稿した結果を以下にまとめました。
– https://paiza.jp/poh/enkoi-second/940fad1e
– https://paiza.jp/poh/enkoi-third/72be7929
– https://paiza.jp/poh/enkoi-ending/65140932