hdu 1850 题解】的更多相关文章

题目 题意:n堆扑克牌,每次可以取走一堆中任意张数的扑克牌,问先手胜利第一步有几种可能. 这一题如果除去后面一问就直接问先手赢还是后手赢,这就是一道简单的 $ NIM $ 博弈问题. 定理 $           NIM $ 博弈先手必胜,当且仅当 $ A_1 xor A_2 xor A_3....xorA_ixor.....A_n \neq 0 $ 具体证明李煜东书上有,这里不做阐述.(可用数学归纳法进行证明 在了解到这个定理后我们还要知道一个式子 $ a  xor  b =c  ,b  xo…
题意:Nimm Game 思路:Nimm Game #include<iostream> #include<stdio.h> using namespace std; int main(){ ],i,sum,ans; while(~scanf("%d",&m)&&m){ sum=; ;i<m;++i){ scanf("%d",&a[i]); sum^=a[i]; } if(sum){ ans=; ;i&l…
HDU.1850 Being a Good Boy in Spring Festival (博弈论 尼姆博弈) 题意分析 简单的nim 博弈 博弈论快速入门 代码总览 #include <bits/stdc++.h> #define nmax 105 using namespace std; int a[nmax]; int main() { int m; while(scanf("%d",&m) != EOF && m){ int ans = 0,…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1850 Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧陪妈妈逛一次菜场悄悄给爸爸买个小礼物主动地 强烈地 要求洗一次碗某一天早起 给爸妈用心地做回早餐如果愿意 你还可以和爸妈说咱们玩个小游戏吧 ACM课上学的呢-下面是一个二人小游戏:桌子上有M堆扑克牌:每堆牌的数量分别为Ni(i=1…M):两人轮流进行:每走一步可以任意选择一堆并取…
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7095 Accepted Submission(s): 4300 Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐 如…
我想说这道题我还没弄明白我错哪了,交了20多遍一直都是Runtime Error,改了N次还是不对,后来搜了一下,说是数组开小了,又把数组开大,还不对,又改发现一个平均值求错,再改,还不对,洗洗睡吧.上午用了多个测试样例,结果第对的,可还是Runtime Error,于是就搜了一个跟自己差不多的代码,发现方法一样,输出有点差别,改完后就AC,难道真是输出错了,还是for循环多了?等我想明白了再说吧-- 题意:给出N个同学(N<=50),M(M<=5)门课程的成绩,求每个学生的平均成绩和每门课的…
网赛的时候看了这道题,发现就是平常的那种基础搜索题. 由于加了一个特殊条件:可以一次消耗3秒或原地停留1秒. 那就不能使用简单的队列了,需要使用优先队列才行. 题意 告诉一副地图:一个起点,一个终点,若干墙,若干监视器,剩下的是空地. 起点,终点,监视器都算空地. 监视器初始值会指定一个方向,共有四个方向. 监视器每秒顺时针转动到下个方向. 监视器视野距离为2. 在监视器的位置或在监视器面向的格子是监视区域. 普通的移动一格需要消耗1秒时间. 在监视器下移动一格需要消耗3秒时间. 如果呆在原地不…
第一眼看到这题,哇,这不是我刚做完的题吗?大水题!然后 这题表面很水,实际上有点坑. 题意 求经过 $ 1 - n $(不能遗漏) 并且回到 $ 1 $ 的最短路. 在看这题之前我们可以来看下这题 最短Hamilton路 这道题的要求是我们要让每个点不重不漏的经过并且最终到达 $ n-1 $ 我们看数据范围,就可以直接状压dp,枚举状态. 由于题目已经给出最短路,便可以直接计算 #include<bits/stdc++.h> using namespace std; int n,a[30][3…
题面: 最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K.最大连续子序列是所有连续子序列中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5,…
题目链接 HDU - 5970 分析 很显然\(f(x,y)\)与\(f(x+y*k,y)\)的结果相同,因为它们在第一次取模后会变成相同的式子 我们再看一下数据的范围,突破口肯定在\(m\)那里 那么我们就可以从m开始枚举,对于每一个m,我们分别求出模\(m\)等于\(0,1,2......m-1\)的\(f\)值 那么我们就可以把所有模\(m\)的值相同的数放在一起单独处理 对于每一个单独处理的数列,我们不能简单地进行求和处理,因为会涉及到向下取整的操作 其实,我们再推算一下,\(f(i,j…
题目传送门 分析 题目大意:给一个竞赛图,将图分成两部分,判断两部分的图是否符合传递闭包,a->b,b->c,则a->c 这道题用Floyd硬跑的显然n\({^3}\)会T 如果用bfs可能能过,不过有些麻烦,而且时限也不少 其实传递闭包的话用bitset就可以了 时间效率为n\({^2}\),一共有20组数据,所以实际还要大一些 但是bitset的常数非常小,大概只有\(\frac{1}{32}\),所以过这一道题还是没有问题的 代码 #include<bits/stdc++.h…
此题先考虑第一种,5 7 9的情况,先手如果想赢,则必定要把异或值变为0,因为随便取,所以此处的异或指的是对堆中的石子数进行异或,而非异或其SG函数. 首先7^9=14,因为要异或为0,则5要变成14,这时14^14才使得nim_sum为0,显然这是不可能的,再考虑5^9=12,要7变成12也是不可能的,然后再考虑一,5^7=2,让9变成2是可能的,因为9>2,所以问题转化成,取一堆为孤立堆,其他n-1堆做异或,看此堆的石子数ai是否大于异或值,如果大于则cnt++,然后循环跑个遍就可以了. 代…
考虑到Bouton定理的证明过程,设n个数的Nim和(异或和)为X,其最高位的1在第k位,那么n个数中一定有个y的第k为也是个1. 将y的数量变为X xor y,那么n的数的Nim和为0,便转为先手必败局面. 所以先手有多少种取法,就看n个数里面有多少个y,满足二进制的第k为是个1. #include <cstdio> ; + ; int a[maxn]; int main() { int n; && n) { ; ; i < n; i++) { scanf("…
求可行的方案数!! 代码如下: #include<stdio.h> ]; int main(){ int n,m; while(scanf("%d",&n)&&n){ m=; ;i<n;i++){ scanf("%d",&a[i]); m^=a[i]; } ; ;i<n;i++) if((m^a[i])<a[i]) cnt++; printf("%d\n",cnt); } ; }…
//赢得了上风 //从n几年移除堆叠一堆石头,有多少可取的石头堆 # include <stdio.h> # include <string.h> # include <algorithm> using namespace std; int main() { int n,sum,i,j,a[1010],cot,vis[1010]; while(~scanf("%d",&n),n) { sum=0; for(i=0;i<n;i++) {…
思路:可以对任意一堆牌进行操作,根据Nim博弈定理--所有堆的数量异或值为0就是P态,否则为N态,那么直接对某堆牌操作能让所有牌异或值为0即可,首先求得所有牌堆的异或值,然后枚举每一堆,用已经得到的异或值再对这堆牌异或,就能得到其他牌堆的异或值,如果当前牌堆的数量大于该异或值,就说明可以拿走一些牌让当前堆牌数等于异或值,两者异或为0,则对手处于P态. AC代码 #include <cstdio> #include <cmath> #include <algorithm>…
Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈说 咱们玩个小游戏吧 ACM课上学的呢- 下面是一个二人小游戏:桌子上有M堆扑克牌:每堆牌的数量分别为Ni(i=1-M):两人轮流进行:每走一步可以任意选择一堆并取走其中的任意张牌:桌子上的扑克全部取光,则游戏结束:最后一次取牌的人为胜者. 现在我们不想研究到底先手…
桌子上有M堆扑克牌:每堆牌的数量分别为Ni(i=1…M):两人轮流进行:每走一步可以任意选择一堆并取走其中的任意张牌:桌子上的扑克全部取光,则游戏结束:最后一次取牌的人为胜者. 现在我们不想研究到底先手为胜还是为负,我只想问大家: ——“先手的人如果想赢,第一步有几种选择呢?”  Input输入数据包含多个测试用例,每个测试用例占2行,首先一行包含一个整数M(1<M<=100),表示扑克牌的堆数,紧接着一行包含M个整数Ni(1<=Ni<=1000000,i=1…M),分别表示M堆扑…
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3142    Accepted Submission(s): 1821 Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场悄悄给爸爸买…
一.题意 求椭圆内接矩形周长的期望. 二.推导过程 已知$c$,容易得出矩形弦长$d=4a\sqrt{1-\frac{c^2}{b^2}}$ 接下来,矩形周长$p=4c+d=4c+4a\sqrt{1-\frac{c^2}{b^2}}$ 那么,椭圆内接矩形周长的期望值$E=\frac{\int_{0}^{b}(4c+4a\sqrt{1-\frac{c^2}{b^2}})\, dc}{b}$ 令$F(c)=\int_{0}^{b}(4c+4a\sqrt{1-\frac{c^2}{b^2}})\, d…
一.题意 给定一个元素个数为$N(1 \le N \le 10^5)$初始序列$a$和$b$,$a$序列的初始值全为$0$,$b$序列的初始值为$1$到$N$的一个排列.有$T(1 \le T \le 10^5)$次操作.操作有如下两种类型: 1.$add\ l\ r$:给序列$a$的区间$[l, r]$内所有元素加$1$: 2.$query\ l\ r$:查询$\sum\limits_{i=l}^{r}\lfloor{\frac{a_i}{b_i}}\rfloor$,并输出. 二.简要思路概括…
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6767    Accepted Submission(s): 4100 Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场悄悄给爸爸买…
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7382    Accepted Submission(s): 4490 Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场悄悄给爸爸买…
题意: 思路: 如果全部扑克牌数目异或的结果ans为0,则必输,输出0.否则,必须要给对方一个P状态,可以对所有扑克堆进行逐个排查,将ans^a[i]就可以得到除了a[i]之外其他扑克数的异或结果tmp,目的就是要使得tmp为0,那么肯定要从a[i]堆中拿走一些牌使得剩下的牌数异或tmp为0.可能出现的情况(1)tmp比a[i]还大,那么这不是正确的方案.(2)tmp=0,那么要将a[i]全部取走.(3)tmp<a[i],那么要取走a[i]-tmp张牌,留下tmp张,刚好异或结果为0. #inc…
Let’s talking about something of eating a pocky. Here is a Decorer Pocky, with colorful decorative stripes in the coating, of length L. While the length of remaining pocky is longer than d, we perform the following procedure. We break the pocky at an…
题目 题意:就是问在一个$ n* m $的矩阵中站在 $ (0,0) $ 能看到几个整数点. 很明显如果有两个平行向量 $ \vec{a}=(x_1,y_1) $ ,$ \vec{b}=(x_2,y_2) $ 那么很明显 $ (x_1,y_1) ,(x_2,y_2) $ 满足$ x_1=k* x_2 , y_1=k * y_2 $ .那么两个点最多只能看到一个点,那么我们的目的就是找到有多少个点 $ (x,y) $ 中 $ x,y $ 互质 即 $ gcd(x,y)=1 $ 那么我们的问题就转变…
题目 题意 给出一张图,每条道路有限高,给出车子的起点,终点,最高高度,问在保证高度尽可能高的情况下的最短路,如果不存在输出 $ cannot  reach  destination $ 跟前面 $ hdu5418 $ 一样的,题目挺基础的,但是在细节方面比较抠.要是最高度尽可能高,我们就可以想去枚举可能的高度去跑 $ spfa $ ,但我们可以发现这样效率太低了,那么我们为什么不二分答案呢?给出最高高度了,最低不就是 $ 0 $ 吗?二分答案再去跑 $ spfa $ 加上限制条件. 这题时限…
题目 题意 给出两个字符串 $ s1,s2 $,每次操作可以使一段连续的子串全变成一个字母,问最少多少次操作可以使 $ s1 $ 变为 $ s2 $. 例如 $ zzzzzfzzzzz $,长度为 $ 11 $ ,我们就将下标看做 $ 1~11 $ 先将 $ 1-11 $ 刷一次,变成 $ aaaaaaaaaaa $ $ 2-10:abbbbbbbbba $ $ 2-8:abcccccccba $ $ 3-7:abcdddddcba $ $ 4-6:abcdeeedcab $ $ 5:abcde…
题目 题意 一个数字正方形(所有数都是两位的正整数),取了一个数后,它的周围 $ 8 $ 个数都不能被选,问最大取数总和. 注意数据范围 $ 3=< n <=15 $ 我们可能一开始会去想暴力搜索,枚举状态,但很容易发现时间复杂度过高过不去,于是可以去想dp,先预处理出可行状态,然后枚举可行状态,以及行数,进行转移即可. 我们定义 $ f[i][j] $ 表示当前在第 $ i $ 行此时状态为 $ j $ 状态先处理出来这里只要存编号就好了 转移方程 $ f[i][k]=max(f[i][k]…
M斐波那契数列 此题对数学基础要求较高 来源矩阵乘法_百度百科 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如[acbd][abcd]的数表称为二阶矩阵,其中a,b,c,d称为这个矩阵的元素. 形如 [x1x2][x1x2] 的有序对称为列向量 设 A=[acbd]A=[abcd] B=[x1x2]B=[x1x2] 则C=[ax1+bx2ax2+bx1]C=[ax1+bx2ax2+bx1] 称为二阶矩阵A与平面向量B的乘积,记为AB=C 更一般的…