ちょろちょろABCを解いています。今日はaccumulateを使う問題やってました。
[blogcard url=”https://atcoder.jp/contests/abc129/tasks/abc129_b”]
提出したコードは以下の通り。
#include <iostream> #include <algorithm> #include <numeric> #include <cmath> using namespace std; int main(int argc, char const *argv[]) { int n; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } int ans=1000000; for(int i=0;i<n;i++){ int sub=0; int top=0; sub=accumulate(a,a+i,0); top=accumulate(a+i,a+n,0); // cout<<"i="<<i<<" "<<"sub="<<sub<<" "<<"top="<<top<<endl; if(abs(top-sub)<ans) ans=abs(top-sub); } cout<<ans<<endl; return 0; }
2グループに分けて、それぞれのグループの和の差の絶対値を最小化せよという問題なので、それ通りに書くだけです。
グループに分けて合計を求めるときに使ったのがaccumulateです。
accumulateは範囲内の和を前から順に求めていく関数です。
範囲は[first last)になります。(first≦i<last)
やっぱりnumericって便利やなあ!
ピンバック: ABC131B問題解いた | 昨日プログラム書きました