CCPC绵阳 7-7 Game of Cards(打表找规律)

2024-04-15 23:38

本文主要是介绍CCPC绵阳 7-7 Game of Cards(打表找规律),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
题意:
数字0,1,2,3各有一些数目,每次可以取两个数字和小于等于3,然后替换成其和。
不能选数的人输了。求先手是否必胜。

思路:
用dfs(因为不会SG)打了个表然后找规律,发现和c3的数目没有关系,然后只需要判断c0和c1的关系。
唯一需要特判的是c1 c2 c3都是0的情况。

#define MYDEBUG#include <algorithm>
#include <iostream>
#include <cstdio>
#include <bitset>
#include <string>
#include <cstring>
#include <ctime>
#include <stack>
#include <vector>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#include <list>using namespace std;bool check(int c0,int c1,int c2,int c3) {if(c1 % 3 == 2) {return true;} else if(c1 % 3 == 0) {if(c0 % 2 == 0) return false;else return true;} else if(c1 % 3 == 1) {if(c0 % 2 == 0) return true;else return false;}return false;
}int vis[40][40][40][40]; //bool dfs(int c0,int c1,int c2,int c3) { //打表代码if(vis[c0][c1][c2][c3] != -1) return vis[c0][c1][c2][c3];if(c0 + c1 + c2 + c3 <= 1) return false;bool flag = false;//c0 + c1if(c0 >= 1 && c1 >= 1 && !dfs(c0 - 1,c1,c2,c3)) flag = true;//c0 + c2if(c0 >= 1 && c2 >= 1 && !dfs(c0 - 1,c1,c2,c3)) flag = true;//c0 + c3if(c0 >= 1 && c3 >= 1 && !dfs(c0 - 1,c1,c2,c3)) flag = true;//c1 + c2if(c1 >= 1 && c2 >= 1 && !dfs(c0,c1 - 1,c2 - 1,c3 + 1)) flag = true;//c0 + c0if(c0 >= 2 && !dfs(c0 - 1,c1,c2,c3)) flag = true;//c1 + c1if(c1 >= 2 && !dfs(c0,c1 - 2,c2 + 1,c3)) flag = true;return vis[c0][c1][c2][c3] = flag;
}int main() {int kase = 0;int T;scanf("%d",&T);srand(time(NULL));while(T--) {int c0,c1,c2,c3;scanf("%d%d%d%d",&c0,&c1,&c2,&c3);printf("Case #%d: ",++kase);bool flag = false;if(c0 == 0 && c1 == 0 && c2 == 0 && c3 == 0) {flag = false;} else if(c1 == 0 && c2 == 0 && c3 == 0) {if(c0 % 2 == 1) {flag = false;} else {flag = true;}} else {if(c2 < c1 % 3) {flag = check(c0,c1 - 1,c2,c3);} else {flag = check(c0,c1,c2,c3);}}if(flag) printf("Rabbit\n");else printf("Horse\n");}return 0;
}

这篇关于CCPC绵阳 7-7 Game of Cards(打表找规律)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907247

相关文章

poj 1511 Invitation Cards(spfa最短路)

题意是给你点与点之间的距离,求来回到点1的最短路中的边权和。 因为边很大,不能用原来的dijkstra什么的,所以用spfa来做。并且注意要用long long int 来存储。 稍微改了一下学长的模板。 stack stl 实现代码: #include<stdio.h>#include<stack>using namespace std;const int M

uva 568 Just the Facts(n!打表递推)

题意是求n!的末尾第一个不为0的数字。 不用大数,特别的处理。 代码: #include <stdio.h>const int maxn = 10000 + 1;int f[maxn];int main(){#ifdef LOCALfreopen("in.txt", "r", stdin);#endif // LOCALf[0] = 1;for (int i = 1; i <=

uva 10916 Factstone Benchmark(打表)

题意是求 k ! <= 2 ^ n ,的最小k。 由于n比较大,大到 2 ^ 20 次方,所以 2 ^ 2 ^ 20比较难算,所以做一些基础的数学变换。 对不等式两边同时取log2,得: log2(k ! ) <=  log2(2 ^ n)= n,即:log2(1) + log2(2) + log2 (3) + log2(4) + ... + log2(k) <= n ,其中 n 为 2 ^

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

fzu 2275 Game KMP

Problem 2275 Game Time Limit: 1000 mSec    Memory Limit : 262144 KB  Problem Description Alice and Bob is playing a game. Each of them has a number. Alice’s number is A, and Bob’s number i

高精度打表-Factoring Large Numbers

求斐波那契数,不打表的话会超时,打表的话普通的高精度开不出来那么大的数组,不如一个int存8位,特殊处理一下,具体看代码 #include<stdio.h>#include<string.h>#define MAX_SIZE 5005#define LEN 150#define to 100000000/*一个int存8位*/int num[MAX_SIZE][LEN];void

10400 -Game Show Math

这道题的话利用了暴力深搜,尽管给了20S,但是这样还会超时,所以就需要利用回溯进行减枝,因为是DFS,所以用一个数组vis[i][j]记录是否在状态i时候取到过j值,如果取到过的话,那么直接回溯(往后搜索已经没有意义了,之前到达这个状态的时候是无法得到结果的) 还有需要注意的地方就是题目的要求,每一步的结构都在(-32000,32000)之间,所以需要一步判断,如果在这个范围外直接回溯 最后一

CF#284 (Div. 2) C.(几何规律)

题目链接:http://codeforces.com/contest/499/problem/C 解题思路: 把两个点的坐标分别带入方程组,如果最后两个值相乘为负,即异号,计数器++。其中有一个有趣的现象,从A到B的最短步数,可以变化为求A和B之间夹了多少条直线,那么最后只要求出直线数,即可求出最小步数。 如果一条直线夹在A和B中间,那么把A和B的坐标带入后,所得值相乘一定为负。数据很

HDU2524(规律推导)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2524 解题思路: 暴力推出矩阵,以n = 2 , m = 4为例: 1 3  6  10 3 9 18 30 可以发现第一行和第一列都是有规律的,彼此相差2、3、4·····,其他元素为相应行第一个元素乘以第一列元素的积。预处理之后,我们O(1)就可以输出g[n][m]的值。 另外,