A. Good ol' Numbers Coloring
Description
给出两个整数x,y,问$ax+by,a geq 0,b geq 0$不能表示的正整数是否为无穷多个。
Solution
由裴属定理可以知道当$gcd(x,y)|m$时,等式$ax+by=m$一定存在整数解。
那么显然判断条件就是$gcd(x,y)==1$
B. Restricted RPS
Description
已知Bob的剪刀石头布序列。
Alice本人剪刀石头布的次数给定,$a+b+c=n$
Alice至少赢Bob$lceil frac{n}{2} ceil$局才能获胜。
问Alice能否获胜,若可以,给出一组答案序列。
Solution
贪心。
由于总的方案一定
先把能赢的选出来,剩下的随便填入即可。
1 #include <algorithm> 2 #include <cctype> 3 #include <cmath> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <cstring> 7 #include <iostream> 8 #include <map> 9 #include <numeric> 10 #include <queue> 11 #include <set> 12 #include <stack> 13 #if __cplusplus >= 201103L 14 #include <unordered_map> 15 #include <unordered_set> 16 #endif 17 #include <vector> 18 #define lson rt << 1, l, mid 19 #define rson rt << 1 | 1, mid + 1, r 20 #define LONG_LONG_MAX 9223372036854775807LL 21 #define pblank putchar(' ') 22 #define ll LL 23 #define fastIO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) 24 using namespace std; 25 typedef long long ll; 26 typedef long double ld; 27 typedef unsigned long long ull; 28 typedef pair<int, int> P; 29 int n, m, k; 30 const int maxn = 1e2 + 10; 31 template <class T> 32 inline T read() 33 { 34 int f = 1; 35 T ret = 0; 36 char ch = getchar(); 37 while (!isdigit(ch)) 38 { 39 if (ch == '-') 40 f = -1; 41 ch = getchar(); 42 } 43 while (isdigit(ch)) 44 { 45 ret = (ret << 1) + (ret << 3) + ch - '0'; 46 ch = getchar(); 47 } 48 ret *= f; 49 return ret; 50 } 51 template <class T> 52 inline void write(T n) 53 { 54 if (n < 0) 55 { 56 putchar('-'); 57 n = -n; 58 } 59 if (n >= 10) 60 { 61 write(n / 10); 62 } 63 putchar(n % 10 + '0'); 64 } 65 template <class T> 66 inline void writeln(const T &n) 67 { 68 write(n); 69 puts(""); 70 } 71 template <typename T> 72 void _write(const T &t) 73 { 74 write(t); 75 } 76 template <typename T, typename... Args> 77 void _write(const T &t, Args... args) 78 { 79 write(t), pblank; 80 _write(args...); 81 } 82 template <typename T, typename... Args> 83 inline void write_line(const T &t, const Args &... data) 84 { 85 _write(t, data...); 86 } 87 char s[maxn], ans[maxn]; 88 int vis[maxn]; 89 int main(int argc, char const *argv[]) 90 { 91 #ifndef ONLINE_JUDGE 92 freopen("in.txt", "r", stdin); 93 // freopen("out.txt", "w", stdout); 94 #endif 95 int t; 96 cin >> t; 97 while (t--) 98 { 99 memset(vis, 0, sizeof vis); 100 cin >> n; 101 int a, b, c; 102 cin >> a >> b >> c; 103 cin >> s + 1; 104 int res = 0; 105 for (int i = 1; i <= n; i++) 106 if (s[i] == 'P' && c) 107 --c, ans[i] = 'S', ++res, vis[i] = 1; 108 else if (s[i] == 'S' && a) 109 --a, ans[i] = 'R', ++res, vis[i] = 1; 110 else if (s[i] == 'R' && b) 111 --b, ans[i] = 'P', ++res, vis[i] = 1; 112 int p = n / 2; 113 if (n & 1) 114 ++p; 115 if (res >= p) 116 { 117 cout << "YES "; 118 for (int i = 1; i <= n; i++) 119 if (!vis[i]) 120 { 121 if (a) 122 ans[i] = 'R',--a; 123 else if (b) 124 ans[i] = 'P',--b; 125 else if (c) 126 ans[i] = 'S',--c; 127 vis[i] = 1; 128 } 129 ans[n + 1] = '