P3480 [POI2009]KAM-Pebbles 题解
首先,这道题看上去就是个博弈论,很显然的 \(Nim\) 游戏。
因为每一个的取法都和它的上一位有关。
有一种非常显然的转换方式 :我们把这若干堆石子从前向后做一个差分 。
我们记 \(a_i-a_{i-1}=b_i\)
题目转化成:
对于若干堆石子,第 \(i\) 堆石子的个数是 \(b_i\) ,问先手是否必胜?
好像有点问题:
因为所有的石子都是动态变化的。
很显然当一个石子堆变化时,它和它后面一个石子堆的差分结果一定会变化。
所以最传统的 \(Nim\) 游戏显然是不可行的。
考虑阶梯 \(Nim\) 游戏。
我们可以把每一个差分的结果都映射到一个阶梯上。
很容易发现:我们对于每一堆石子的任意一个操作都可以通过在阶梯上移动实现。
(本人较懒,图片就咕咕咕了)
当我们发现所有的石子都移到最上层的台阶时。
可以看出所有的差都变成了 \(0\) ,也就是说所有的都一样。
显然此时会分出胜负。
Code
#include <bits/stdc++.h>
const int N = 100005;
int T, n, a[N];
signed main(void) {
std::ios::sync_with_stdio(false);
std::cin.tie(0); std::cout.tie(0);
std::cin >> T;
for (int test = 1; test <= T; test ++) {
std::cin >> n;
int ans = 0;
for (int i = 1; i <= n; i++) {
std::cin >> a[i];
int num = a[i] - a[i - 1];
if ((n - i) % 2 == 0) ans ^= num;
}
if (ans == 0)
std::cout << "NIE" << std::endl;
else
std::cout << "TAK" << std::endl;
}
}
P3480 [POI2009]KAM-Pebbles 题解的更多相关文章
- P3480 [POI2009]KAM-Pebbles
P3480 [POI2009]KAM-Pebbles比如第一个样例 原:0 2 2差: 2 0 0如果把中间的2拿掉一个,就会变成原:0 1 2差: 1 1 0就可以把差看成阶梯nim细节:最终要移到 ...
- P3480 [POI2009]KAM-Pebbles 阶梯NIM
$ \color{#0066ff}{ 题目描述 }$ 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时 ...
- 洛谷 P3480 [POI2009]KAM-Pebbles
https://www.luogu.org/problemnew/solution/P3480 讲不清楚... 首先对原序列做差分:设原序列为a,差分序列为d 那么,每一次按题意在原序列位置i处取走石 ...
- 【BZOJ1115】[POI2009]石子游戏Kam 阶梯博弈
[BZOJ1115][POI2009]石子游戏Kam Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要 ...
- BZOJ 1115: [POI2009]石子游戏Kam
1115: [POI2009]石子游戏Kam Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 883 Solved: 545[Submit][Stat ...
- 【BZOJ】【1115】【POI2009】石子游戏KAM
博弈论 这个题……一看就觉得很捉急啊= =肿么办? 灵光一现:差分一下~ 那么我们看一下差分以后,从第 i 堆中拿走 k 个石子变成了:a[i]-=k; a[i+1]+=k; 嗯这就转化成了阶梯博弈! ...
- bzoj 1115: [POI2009]石子游戏Kam -- 博弈论
1115: [POI2009]石子游戏Kam Time Limit: 10 Sec Memory Limit: 162 MB Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前 ...
- BZOJ 1115 [POI2009]石子游戏Kam(阶梯博弈)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1115 [题目大意] 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数. ...
- BZOJ1115 [POI2009]石子游戏Kam 【博弈论——阶梯游戏】
题目 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. ...
随机推荐
- Linux中信号量的实现
如果一个任务获取信号量失败,该任务就必须等待,直到其他任务释放信号量.本文的重点是,在Linux中,当有任务释放信号量之后,如何唤醒正在等待该信号量的任务. 信号量定义如下: struct semap ...
- 【审视】Scrum Master的检查清单
一般情况下,一个Scrum Master如果更多的是做组织会议.确保时间盒以及对流程中的障碍快速响应等事项的话,可以同时引导2-3个团队.在这种情况下,团队会在降低问题发生率的基础上提高一定的绩效. ...
- javase集合 温故而知新
复习javase集合 1.为什么要有集合? 数组长度需要在初始化时确定大小,数据结构单一.因此集合出现了 2.数组和集合的区别 区别一:数组既可以存储基本数据类型,又可以存储引用类型,集合只能存储引用 ...
- python3 Softmax函数
Softmax函数公式 Softmax的作用简单的说就计算一组数值中每个值的占比 import torch import torch.nn.functional as F # 原始数据tensor y ...
- 百度3D离线地图开发,3D离线地图开发,百度地图离线开发
3D离线地图介绍(3D离线采用矢量数据作为地图基础,可保持地图数据最新) 一.开发中引用3D离线地图(可独立部署通过内外IP+端口进行访问,也可拷贝js库文件到项目中通过绝对路径访问) 1).离线AP ...
- 如何用好Nginx的gzip指令
说一段废话 压缩响应数据有什么作用呢?问的好:从用户体验和IT成本两方面回答这个问题: 用户体验上 网速一定的情况下,传输10MB数据比传输5MB数据的时间快了一半.所以传输数据越小用户加载页面就越快 ...
- Redis GEO 地理位置
目录 GEO指令 GEOADD GEODIST GEOPOP GEOHASH GEORADIUS GEORADIUSBYMEMBER 指令补充 删除操作 避免单集合数量过多 存储原理 GEOADD存储 ...
- .Net 6 WebApi 项目部署到 Linux 系统上的 Docker 容器
1.创建一个基础的WebApi项目 注意:因为发布时候,Dockerfile文件必须和解决方案.cspro文件放在同级,所以建议勾上这个,当时遇到这个问题,导致打包镜像时找不到.cspro文件,搞了好 ...
- 被迫开始学习Typescript —— vue3的 props 与 interface
vue3 的 props Vue3 的 props ,分为 composition API 的方式以及 option API 的方式,可以实现运行时判断类型,验证属性值是否符合要求,以及提供默认值等功 ...
- 个人冲刺(四)——体温上报app(二阶段)
冲刺任务:完成用户注册功能和数据库类 RegisterActivity.java package com.example.helloworld; import android.content.Inte ...