結果
| 問題 |
No.1007 コイン集め
|
| コンテスト | |
| ユーザー |
ramia777
|
| 提出日時 | 2022-05-27 16:56:22 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,805 bytes |
| コンパイル時間 | 703 ms |
| コンパイル使用メモリ | 94,340 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-09-20 15:18:23 |
| 合計ジャッジ時間 | 2,410 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 18 WA * 1 |
ソースコード
//Yukicoder
//Q1007 coin collect
//二次元可変配列
//vector <vector <int>> mass;
//vector <vector <int>> memo;
//#include "stdafx.h"
#include <iostream>
#include <vector>
#include <list>//list
#include <set> //tree
#include <map> //連想配列
#include <unordered_set> //hash
#include <unordered_map> //hash
#include <algorithm>
#include <iomanip>
using namespace std;
typedef unsigned long long LL;
#define START (0)
#define RIGHT (1)
#define UP (2)
#define LEFT (3)
#define DOWN (4)
vector <vector <int>> memo;
vector<int> q;
vector<int> 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
}
}
ramia777