結果

問題 No.257 N言っちゃダメゲーム (3)
ユーザー startcppstartcpp
提出日時 2015-07-31 23:27:42
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 47 ms / 2,000 ms
コード長 1,465 bytes
コンパイル時間 767 ms
コンパイル使用メモリ 73,620 KB
実行使用メモリ 24,444 KB
平均クエリ数 3.70
最終ジャッジ日時 2023-09-23 21:08:24
合計ジャッジ時間 3,679 ms
ジャッジサーバーID
(参考情報)
judge12 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 46 ms
23,460 KB
testcase_01 AC 44 ms
23,688 KB
testcase_02 AC 46 ms
24,084 KB
testcase_03 AC 43 ms
23,736 KB
testcase_04 AC 42 ms
23,688 KB
testcase_05 AC 41 ms
24,036 KB
testcase_06 AC 43 ms
23,700 KB
testcase_07 AC 43 ms
23,688 KB
testcase_08 AC 46 ms
23,664 KB
testcase_09 AC 42 ms
23,604 KB
testcase_10 AC 43 ms
24,360 KB
testcase_11 AC 41 ms
23,748 KB
testcase_12 AC 43 ms
23,688 KB
testcase_13 AC 45 ms
23,880 KB
testcase_14 AC 43 ms
23,688 KB
testcase_15 AC 45 ms
23,424 KB
testcase_16 AC 46 ms
23,412 KB
testcase_17 AC 46 ms
24,072 KB
testcase_18 AC 46 ms
23,424 KB
testcase_19 AC 46 ms
23,676 KB
testcase_20 AC 45 ms
23,448 KB
testcase_21 AC 45 ms
23,664 KB
testcase_22 AC 45 ms
24,444 KB
testcase_23 AC 46 ms
23,700 KB
testcase_24 AC 47 ms
24,264 KB
testcase_25 AC 46 ms
23,664 KB
testcase_26 AC 46 ms
24,252 KB
testcase_27 AC 45 ms
23,868 KB
testcase_28 AC 45 ms
23,712 KB
testcase_29 AC 45 ms
24,048 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0