ちょろちょろ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問題解いた | 昨日プログラム書きました