2020 China Collegiate Programming Contest - Mianyang Site
赛时通过用✔;赛时尝试未通过用✘;赛后通过用◯;未尝试/待补用▲。
A | B | C | D | E | F | G | H | I | J | K | L |
▲ | ▲ | ▲ | ✔ | ▲ | ▲ | ◯ | ▲ | ▲ | ◯ | ✔ | ◯ |
G
solve by yjh
G· Game of Cards
题意:两个人玩游戏,给四个数,代表价值为0,1,2 ,3卡牌的数量。然后玩家可以进行的操作是,每次选择两个标号和小于等于3的卡牌合并,再把他们的和放入。最后无法进行合并操作的人输掉了游戏。
思路: ·
1.简单分析得每次能操作的要么是减少一个0,要么是1+2,要么是1+1
2.·每次对手都有办法变成要么co一2要么c1一3的情况。
3.·因此c0和c1很大的情况可以直接取模变成小case,c2和c只关心是不是为0。这样对应的状态不多,直接记忆化搜索就好
·注意不能直接c%2和c%3,因为c1,c2,c3全为0的case要特殊考虑
#include<bits/stdc++.h>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<string>
#include<set>
#include<vector>
using namespace std;
#define ll long long
const int mod=998244353;
inline int read() { //读入优化,可以加快数字的输入
char p=0;
int r&