//Yukicoder //Q1007 coin collect //二次元可変配列 //vector > mass; //vector > memo; //#include "stdafx.h" #include #include #include //list #include //tree #include //連想配列 #include //hash #include //hash #include #include using namespace std; typedef unsigned long long LL; #define START (0) #define RIGHT (1) #define UP (2) #define LEFT (3) #define DOWN (4) vector > memo; vector q; vector flag; #define DATA_MAX (1000000) #define FMAX(a,b) ((a)>(b)?(a):(b)) LL a[200010]; int main() { LL N,k; LL max = 0; LL coin = 0; LL right_limit, left_limit; cin >> N; cin >> k; //現在地 a[0] = 0; for (int i = 1; i <= N; i++) cin >> a[i]; // 現在地が0なら0を返して終了 if (a[k] == 0) { cout << 0 << endl; return 0; //end } else { LL total1 = a[k]; LL total2 = a[k]; //現在地よりも前方向の合計 for(int i = k+1;i<=N;i++) { //1のところまで足していく if (a[i] == 1) { total1 += a[i]; break; } total1 += a[i]; } //現在地よりも後ろ方向の合計 for (int i = k-1; i > 0; i--) { //1のところまで足していく if (a[i] == 1) { total2 += a[i]; break; } total2 += a[i]; } if (a[k] == 1) { //現在地が1なら前後どちらかしか行けないので大きいほうをコインの数とする coin = FMAX(total1, total2); } else { //現在値が2以上なら前後どちらも行けるので両方の合計を足す。自分自身を2重に加えているので引いておく coin = total1+total2 - a[k]; } cout << coin << endl; //getchar(); return 0; //end } }