找到规律,隔一个删一个
这个气死了,存的时候从index[1]开始的,访问从index[0],一直re 检测每一行和每一列‘*’数量,最大的行列数量,cntn,cntm以及取到最大值的所有行列
记录最多的数量,如果N - cntn + M - cntm == 1 || 0
的话就直接输出
如果不是的话就需要判断一下缺的‘*’是不是在交汇点,是的话ans–
s中的字符t都有
s中的字符在t中对应顺序相同
s+p中的字符数量够组成t
终于找到规律了,收到之前取石头的启发,寻找必胜的策略
然后下面是打表代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 struct Pos { int x,y,z; }a[MAX]; int flag[MAX];void myanscout (bool flag) { if (!flag) cout << "Alice" <<endl; else cout << "Bob" <<endl; } int main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin >> T; int k; while (T--) { cin >> N >> k; flag[0 ] = 1 ; flag[1 ] = flag[2 ] = 0 ; for (int i = 3 ;i <= N;i++) { a[i].x = i-1 ; a[i].y = i-2 ; if (i >= k) a[i].z = i-k; else a[i].z = -1 ; if (!flag[a[i].x] && !flag[a[i].y] && !flag[a[i].z]) { flag[i] = 1 ; } else flag[i] = 0 ; } for (int i = 0 ;i <= N;i++) { cout << setw (3 ) <<i; } cout << endl; for (int i = 0 ;i <= N;i++) { cout << setw (3 ) <<a[i].x; } cout << endl; for (int i = 0 ;i <= N;i++) { cout << setw (3 ) <<a[i].y ; } cout << endl; for (int i = 0 ;i <= N;i++) { cout <<setw (3 ) << a[i].z ; } cout << endl; for (int i = 0 ;i <= N;i++) { cout << setw (3 ) <<flag[i] ; } cout << endl; myanscout (flag[N]); } return 0 ; }
定义的x,y,z为这一步可以走到的下一步
flag的值代表走到这一步必输还是必赢(0,1)
轻松的可以知道,如果走到n,而n可以到达的下一步都是必输,你走到的n就会必赢,因为对手只能走到必输的一步
通过打表可以找到到规律
如果k不是三的倍数,那么flag一定是100循环
如果k是三的倍数,则是0-K的循环,其实就是k位的 flag1->0,循环
再仔细想一下,其实前三位一定是100,当k不是三的倍数的时候前四位也是确定的1001,那么5,6位也会确定是00,
第七位因为k不是3的倍数所以肯定是不会走到flag = 1的值上,所以答案确定
当k是3的倍数时候再走到k之前,flag是不变的,k位的flag就会 flag1->0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 LL T,N,M; void myanscout (bool flag) { if (!flag) cout << "Alice" <<endl; else cout << "Bob" <<endl; } int main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin >> T; int k; while (T--) { cin >> N >> k; if (k % 3 == 0 ) { N = N%(k+1 ); if (N == k) myanscout (0 ); else myanscout (!(N % 3 )); } else { myanscout (!(N % 3 )); } } return 0 ; }