ABC129B解けた

投稿者: | 2019年8月15日

ちょろちょろ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って便利やなあ!

参考文献

ABC129B解けた」への1件のフィードバック

  1. ピンバック: ABC131B問題解いた | 昨日プログラム書きました

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください