プログラミング問題でスキルレベルを評価、転職するサイトの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;
}a.cpp
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;
}b.cpp
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;
}c.cpp
結果
実際にpaiza上に投稿した結果を以下にまとめました。 - https://paiza.jp/poh/enkoi-second/940fad1e - https://paiza.jp/poh/enkoi-third/72be7929 - https://paiza.jp/poh/enkoi-ending/65140932