結果
問題 | No.1208 anti primenumber game |
ユーザー |
|
提出日時 | 2020-08-30 16:09:25 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 32 ms / 2,000 ms |
コード長 | 1,725 bytes |
コンパイル時間 | 797 ms |
コンパイル使用メモリ | 82,948 KB |
実行使用メモリ | 6,528 KB |
最終ジャッジ日時 | 2024-11-15 10:49:48 |
合計ジャッジ時間 | 3,060 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 44 |
ソースコード
#include<iostream>#include<string>#include<iomanip>#include<cmath>#include<vector>#include<algorithm>#include<utility>#include<cassert>using namespace std;#define int long long#define endl "\n"constexpr long long INF = (long long)2e18;constexpr long long MOD = 1'000'000'007;struct fast_io {fast_io(){std::cin.tie(nullptr);std::ios::sync_with_stdio(false);};} fio;signed main(){cout<<fixed<<setprecision(10);int N, M;vector<int> A;vector<int> B;bool flag = true;int ans = 0;cin>>N>>M;// assert(M > 0);A.resize(N);B.resize(N+1);for(int i = 0; i < N; i++){cin>>A[i];if(A[i] == 1) B[i] = 1;}for(int i = N-2; i >= 0; i--){if(B[i+1] && B[i]) B[i] += B[i+1];}for(int i = 0; i < N; i++){if(A[i] == 1) {if(flag) {ans += (1 - M);} else {ans -= (1 - M);}flag = !flag;} else {if(B[i+1] + i + 1 == N) {if(flag) {ans += max((A[i] - M) + (B[i+1]) / 2 * (1 - M) - (B[i+1]+1) / 2 * (1 - M),(A[i] - 1) - (1 - M) - (B[i+1]) / 2 * (1 - M) + (B[i+1]+1) / 2 * (1 - M));break;} else {ans -= max((A[i] - M) + (B[i+1]) / 2 * (1 - M) - (B[i+1]+1) / 2 * (1 - M),(A[i] - 1) - (1 - M) - (B[i+1]) / 2 * (1 - M) + (B[i+1]+1) / 2 * (1 - M));break;}} else {if(B[i+1]%2) {if(flag) {ans += (A[i] - M);} else {ans -= (A[i] - M);}flag = !flag;} else {if(flag) {ans += (A[i] - 1);ans -= (1 - M);} else {ans -= (A[i] - 1);ans += (1 - M);}}}}}if(ans <= 0) cout<<"Second"<<endl;else cout<<"First"<<endl;return 0;}