洛谷 [P2575] 高手过招】的更多相关文章

题目:https://www.luogu.org/problemnew/show/P2575 第一次用SG函数解决问题,有许多不熟练的地方: 试图按自己的理解写一个dfs,结果错了(连题都没读对,以为是像跳棋一样跳),这样的话用dfs从左往右推就不行了呢: 附上自己的错误尝试: #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; ]; int dfs(int x) {…
SG函数+状压记忆化搜索 观察题目发现,每一行都是独立的,只要处理出来每一行的SG值,异或起来就好 每一行的SG值可以用状压+记忆化搜索的方法来求,对位运算技术是个很大的考验 注意SG值要预处理出来,不能每次算 (WA的原因是 a数组在递归的过程中没有被清空,而是直接覆盖了,如果动态开数组就没有这样的问题) #include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib>…
洛谷1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始之前和高手一起在鳌头山上一起散步.高手当然不会放弃这次梦寐以求的机会,他已经准备好了一切. 题目描述 鳌头山上有n个观景点,观景点两两之间有游步道共m条.高手的那个它,不喜欢太刺激的过程,因此那些没有路的观景点高手是不会选择去的.另外,她也不喜欢去同一个观景点一次以上.而高手想让他们在一起的路程最…
https://www.luogu.org/problemnew/show/P1184 (题目出处) 见到地名,自然就想到字符串了.可以从第一天开始,将她的位置与高手方便取得地方一一比较,(char字符串型可用strcmp(s1,s2): 当字符串s1<s2时,返回为负数: 当s1==s2时,返回值= 0: 当s1>s2时,返回正数. 即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止.) (string型可直接用“==”比较,若相等,返回1,反…
题目传送门 那位高手是谁啊?@jxpxcsh  QWQ. 这道题数据特别水,所以直接使用O(n*m),每读进一个m内的字符串,就扫一遍n的字符串.但注意地点字符串中有可能会有空格,所以这时候就要请出getline出场了. #include<bits/stdc++.h> using namespace std; ],ll; ; int main(){ cin>>n>>m; getline(cin,ll); ;i<=n;i++) getline(cin,gs[i]);…
P1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始之前和高手一起在鳌头山上一起散步.高手当然不会放弃这次梦寐以求的机会,他已经准备好了一切. 题目描述 鳌头山上有n个观景点,观景点两两之间有游步道共m条.高手的那个它,不喜欢太刺激的过程,因此那些没有路的观景点高手是不会选择去的.另外,她也不喜欢去同一个观景点一次以上.而高手想让他们在一起的路程最长…
P1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始之前和高手一起在鳌头山上一起散步.高手当然不会放弃这次梦寐以求的机会,他已经准备好了一切. 题目描述 鳌头山上有n个观景点,观景点两两之间有游步道共m条.高手的那个它,不喜欢太刺激的过程,因此那些没有路的观景点高手是不会选择去的.另外,她也不喜欢去同一个观景点一次以上.而高手想让他们在一起的路程最长…
题目描述 我们考虑如何把问题转换成博弈论来求解. 我们对于每一行之前都加上一个空格. 设原来这一行的空格个数是 \(C\) ,那么此时空格个数变成 \(C + 1\) . 然后按照从左到右的顺序给每一个空格标号. 接着构建出一个数组 \(p_i\) . \(p_i\) 表示从第 \(i\) 个空格开始后面有多少个连续的棋子. 比如像这样的一行棋盘: \[\circ\circ\bullet\circ\circ\bullet\bullet\bullet\circ\circ\bullet\circ\b…
题目链接 \(Click\) \(Here\) 关键在于转换成阶梯\(Nim\)的模型.最开始把题目看错了,理解正确后发现棋子可以向后跳不止一位,那么就比较简单了. 这里把空格看做阶梯,棋子看做硬币,这样整个模型就满足阶梯\(Nim\)的性质了.阶梯\(Nim\)的证明我不会,请自己\(yy\). #include <bits/stdc++.h> using namespace std; const int M = 30; const int N = 1010; int n, t, a[M],…
传送门 直接搞好像搞不了 考虑转换模型 显然每一行棋子不会跑到其他行.. 所以可以把每一行的情况看成一个子博弈 显然整个答案就是每一行的SG值的异或和 不懂的回去学SG函数... 考虑怎么分析一行的状况 可以发现空位的个数是不会变的 如果把每一段连续的棋子看成一块 整块的的值为块中棋子的个数 那么每次操作会使一块的值减少一个数 $a$ 然后让右边的另一块增加 $a$ 显然变成了阶梯Nim.. 然后就可以搞了 (关于阶梯Nim,我是在 这里 学的,讲得很清楚) 代码很简单,不用注释了吧 #incl…