A Good ol’ Numbers Coloring
#include <bits/stdc++.h>
using namespace std;
int gcd(int x, int y)
{
return !y?x:gcd(y, x%y);
}
int main()
{
int t; scanf("%d", &t);
while(t--) {
int a, b;
scanf("%d%d", &a, &b);
int x = gcd(a, b);
if(x == 1) puts("Finite");
else puts("Infinite");
}
return 0;
}
B Restricted RPS
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(x, y) cout <<x<<" "<<y<<endl
#define nl endl
const int N = 1e5+10;
map<char, int> mp;
void init()
{
mp['R'] = 1;mp['P'] = 2; mp['S'] = 3;
}
int main()
{
int t;
init();
scanf("%d", &t);
while(t--) {
int n, a, b, c;
scanf("%d%d%d%d", &n, &a, &b, &c);
string s; cin >> s;
int num[10]; memset(num, 0, sizeof(num));
for(int i = 0; i < n; ++i) num[mp[s[i]]]++;
num[1] = min(num[1], b);
num[2] = min(num[2], c);
num[3] = min(num[3], a);
if(num[1]+num[2]+num[3] >= (n+1)/2)
{
bool vis[110];
memset(vis, 0, sizeof(vis));
puts("YES");
a -= num[3], b -= num[1], c -= num[2];
for(int i = 0; i < n; ++i) {
if(num[1]&&s[i]=='R')
{
s[i] = 'P';
vis[i] = true;
num[1]--;
}
else if(num[2]&&s[i]=='P')
{
s[i] = 'S';
vis[i] = true;
num[2]--;
}
else if(num[3]&&s[i]=='S')
{
s[i] = 'R';
vis[i] = true;
num[3]--;
}
}
for(int i = 0; i < n; ++i)
{
if(vis[i]) continue;
if(a) {
s[i] = 'R';
a --;
}
else if(b) s[i] = 'P', b--;
else if(c) s[i] = 'S', c--;
}
cout << s<<"\n";
}
else puts("NO");
}
return 0;
}
C. Constanze’s Machine
类似于斐波那契,注意细节。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(x, y) cout <<x<<" "<<y<<endl
#define nl endl
const int N = 1e5+10;
vector<int> vec;
bool flag;
ll mod = 1e9+7;
ll dp[N];
void init()
{
vec.clear(); flag = false;
}
void test()
{
dp[0] = 1;
dp[1] = 1, dp[2] = 2;
for(int i = 3; i < N; ++i)
dp[i] = (dp[i-1]+dp[i-2])%mod;
}
int main()
{
test();
string s;
while(cin >> s)
{
init();
int cnt;
for(int i = 0; s[i]; ++i)
{
if(s[i] == 'w'||s[i] == 'm') {
flag = true; break;
}
if(s[i] == 'n')
{
cnt = 0;
while(s[i]&&s[i] == 'n') cnt++, ++i;
vec.push_back(cnt);
}
}
for(int i = 0; s[i]; ++i)
{
if(s[i] == 'w'||s[i] == 'm') {
flag = true; break;
}
if(s[i] == 'u')
{
cnt = 0;
while(s[i]&&s[i] == 'u') cnt++, ++i;
vec.push_back(cnt);
}
}
ll ans = 1;
if(flag) ans = 0;
for(int i = 0;i <(int)vec.size(); ++i) {
ans = (ans*dp[vec[i]])%mod;
}
printf("%lld\n", ans);
}
return 0;
}