結果
| 問題 |
No.257 N言っちゃダメゲーム (3)
|
| コンテスト | |
| ユーザー |
startcpp
|
| 提出日時 | 2015-07-31 23:27:42 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 64 ms / 2,000 ms |
| コード長 | 1,465 bytes |
| コンパイル時間 | 678 ms |
| コンパイル使用メモリ | 79,800 KB |
| 実行使用メモリ | 25,448 KB |
| 平均クエリ数 | 3.70 |
| 最終ジャッジ日時 | 2024-07-16 20:57:59 |
| 合計ジャッジ時間 | 4,124 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 30 |
ソースコード
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
/*
自分のターンに…
N-1…負け
N-K-1~N-2…N-1にできるので勝ち
N-K-2…N-1にされるので負け
N-2K-2~N-K-3…N-K-2にできるので勝ち
N-2K-3…N-K-2にされるので負け
…
一般に
・N-n(K+1)-1(nは非負整数)になったら負け。
・初期値がN-n(K+1)-1となる場合(すなわち、N % (K+1) == 1を満たすとき)、
順序を変更する必要がある。
・戦略としては、N-n(K+1)-1を常に作り続けること。
どうやって?
・入力値をinとし
in = N - n(K+1) - X
をみたすとする。このとき、
X + n(K+1) = N - in
を満たす。つまり
(N - in) % (K+1) == Xとなる。
今度は、
(N - in) % (K+1) == 1としたい!そのためには…
X == 0ならin + Kを出力
X == 1なら負け(だけど、それはあり得ない)
X > 1(実質X > 0)なら、in + X - 1を出力
すればよい。
*/
int n, k;
signed main() {
cin >> n >> k;
if (n % (k+1) == 1)
cout << 0 << endl;
else
cout << (((n % (k+1))==0)? k : (n % (k+1)) - 1) << endl;
int in;
while (cin >> in) {
if (in >= n)
break;
int X = (n - in) % (k+1);
if (X == 0)
cout << in + k << endl;
else
cout << in + X - 1 << endl;
}
return 0;
}
startcpp