1413: [ZJOI2009]取石子游戏
Description
在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排。游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中取出若干颗石子,可以将那一堆全部取掉,但不能不取,不能操作的人就输了。 Orez问:对于任意给出一个初始一个局面,是否存在先手必胜策略。
Input
文件的第一行为一个整数T,表示有 T组测试数据。对于每组测试数据,第一行为一个整数n,表示有n堆石子;第二行为n个整数ai,依次表示每堆石子的数目。
Output
对于每组测试数据仅输出一个整数0或1。其中1表示有先手必胜策略,0表示没有。
Sample Input
1
4
3 1 9 4
4
3 1 9 4
Sample Output
0
数据范围
对于30%的数据 n≤5 ai≤105
对于100%的数据 T≤10 n≤1000 每堆的石子数目≤109
数据范围
对于30%的数据 n≤5 ai≤105
对于100%的数据 T≤10 n≤1000 每堆的石子数目≤109
这是一题思维量比较大的题目。 // 有些还待思想。

1 #include <cstdio> 2 3 const int kMaxN = 1000; 4 int t, n, s[kMaxN], fl[kMaxN][kMaxN], fr[kMaxN][kMaxN]; 5 6 int main() { 7 scanf("%d", &t); 8 while (t --) { 9 scanf("%d", &n); 10 for (int i = 0; i < n; ++ i) scanf("%d", &s[i]); 11 for (int i = 0; i < n; ++ i) fl[i][i] = fr[i][i] = s[i]; 12 for (int k = 1; k < n; ++ k) 13 for (int i = 0; i < n - k; ++ i) { 14 int j = i + k, p, q, x; 15 16 p = fl[i][j - 1], q = fr[i][j - 1], x = s[j]; 17 if (x == q) fl[i][j] = 0; 18 else if ((x < p && x < q) || (x > p && x > q)) fl[i][j] = x; 19 else if (p < q) fl[i][j] = x + 1; 20 else fl[i][j] = x - 1; 21 22 p = fr[i + 1][j], q = fl[i + 1][j], x = s[i]; 23 if (x == q) fr[i][j] = 0; 24 else if ((x < p && x < q) || (x > p && x > q)) fr[i][j] = x; 25 else if (p < q) fr[i][j] = x + 1; 26 else fr[i][j] = x - 1; 27 } 28 if (n == 1) printf("1\n"); 29 else printf("%d\n", (fr[0][n - 2] != s[n - 1])); 30 } 31 return 0; 32 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?