UVa 11489 整数游戏】的更多相关文章

https://vjudge.net/problem/UVA-11489 题意: 给出一个数字串n,两个人轮流从中取出一个数字,要求每次取完之后剩下的数是3的倍数,不能取数者输. 思路: 要想取掉一个数后总和还是的倍数,那么取掉的数必须得是3的倍数. 分两种情况: ①数字串总和为3的倍数,此时只需要看数字串中3的倍数的个数,奇数个的话先手赢,否则后手赢. ②数字串总和不为3,那么它会余1or余2,如果余1,那么查看数字串中是否存在%3后余1的数,如果有,则转化成了①情况,否则先手就输.(同理分析…
https://vjudge.net/problem/UVA-10891 题意: 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取.每次玩家只能从左端或者右端取任意数量个数,但不能两端都取.所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分.两个人采取的策略都是让自己的得分尽量高,并且两个人都足够聪明,求A的得分减去B的得分后的结果. 思路: 不管是轮到谁取数,都是在一个序列中从左边或右边开始取最大值. 那么我们就令d[i][j]表示先手在[i~j]序列中所能取到…
游戏规则,计算机想一个单词让你猜,你每次可以猜一个字母,如果单词里有那个字母,所有该字母都会显示出来,如果没有那个字母则计算机会在一副"刽子手"画上填一笔,这幅画一共需要7笔就能完成,因此你最多只能错6次.注意猜一个已经猜过的字母也算错.在本题中,你的任务是编写一个"裁判"程序,输入单词和玩家的猜测,判断玩家赢了,(You win.).输了(You lose.).还是放弃了(You chickened out.)每组包含3行,第一行是游戏编号(-1为输入结束标记),…
UVA 11249 - Game 题目链接 题意:两堆石头.a和b.每次能取一堆随意数量,或者两堆同一时候取.可是绝对值差不能超过k,最后不能取的人输,问先手能否赢 思路:先如果(a, b)石子,a是少的一堆.首先非常easy看出(1, k + 2)是必败的,设下一个是(2, x)那么如果这个状态能到(1, k + 2)那么就是必胜,要找出(2, x)必败状态,就必定是上个状态多的一堆石子 + k + 2 - 1.这样不管怎么取.都无法变成(1, k + 2),而后手因为先手取掉了一个,就能够了…
https://vjudge.net/problem/UVA-127 题意: 按从左至右的顺序发牌,并摆成一行,发牌不要相互重叠.游戏中一旦出现任何一张牌与它左边的第一张或第三张“匹配”,即花色或点数相同,则须立即将其移动到那张牌上面.如果牌被移动后又出现了上述情况,则需再次向左移动.每叠牌只能移动最上面的一张.如果一叠牌被移空,应该立即将右边各叠整体向左移动,补上这个空隙.依次将整副牌都发完,并不断的向左合并.输出最后的牌堆数以及各牌堆的牌数. 思路: 代码虽然写着挺长,但题目很简单.用栈解决…
看题传送门 题目大意: S和T在玩游戏,S先.给出一数字串,两人轮流取出一个数字,要求每次取完之后剩下的数为3的倍数,或者没有数字留下.如果两个人足够聪明,求胜利的一方. 思路: 我一开始竟然没有输Case 直接交上去了,WA死了.笨蛋. 分情况讨论呗. 记3.6.9的个数为tsn 如果一开始和就是3的倍数,那S只能拿3.6.9,所以当这tsn为奇数个胜利~ 如果一开始不是3的倍数,那S必须凑成3的倍数,所以之后tsn应该为偶数. 当然,题目还说拿完也算赢.所以只有一个数的时候S胜利. #inc…
题目链接 #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <ctime> #include <cstdlib> #include <iostream> using namespace std; ]; ]; int main() { ,i,len,sum,ans; scanf("%d",&am…
很简单的一个题目,就是队列的运用就可以了,就是注意一下1的时候的情况就可以了. #include<iostream> #include<queue> using namespace std; int main() { queue<int> s; int n,t; while (cin >> n && n) { ; i <= n; i++) { s.push(i); } ; ) cout << "Discarded…
简单博弈 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #include <set> #include <stack> #include <vector> #include <sstream> #include <string> #include <cstring> #include <al…
一个数字能被3整除就等价于这个数的各个数字之和被3整除. 所以一开始的时候先要拿一个能使剩下的数字是3的倍数的数. 然后就一直拿0.3.6.9直到某人不能再拿为止. #include <cstdio> #include <cstring> + ; char s[maxn]; ]; int main() { //freopen("in.txt", "r", stdin); int T; scanf("%d", &T)…