A - Rikka with Nash Equilibriumc++
題意:構造一個$n * m$的矩陣,使得$[1, n * m]$ 中每一個數只出現一次,而且納什均衡只出現一次。ide
思路:從大到小的放置,每個均可以拓展一行拓展一列或者放在已經拓展的行列焦點,用記憶化搜索/dp便可ui
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 typedef long long ll; 6 7 int n, m; 8 ll p; 9 ll dp[81][81][81 * 81]; 10 11 ll DFS(int x, int y,int z) 12 { 13 if(z >= n * m) return 1; 14 if(dp[x][y][z] != -1) return dp[x][y][z]; 15 ll res = 0; 16 if(x < n) res = (res + y * (n - x) % p * DFS(x + 1, y, z + 1)) % p; 17 if(y < m) res = (res + x * (m - y) % p * DFS(x, y + 1, z + 1)) % p; 18 if(x * y > z) res = (res + (x * y - z) * DFS(x, y, z + 1)) % p; 19 dp[x][y][z] = res; 20 return res; 21 } 22 23 int main() 24 { 25 int t; 26 scanf("%d", &t); 27 while(t--) 28 { 29 scanf("%d %d %lld", &n, &m, &p); 30 memset(dp, -1, sizeof dp); 31 ll ans = DFS(1, 1, 1); 32 ans = n * m % p * ans % p; 33 printf("%lld\n", ans); 34 } 35 return 0; 36 }
B - Rikka with Seamspa
留坑。code
C - Rikka with APSPblog
留坑。ci
D - Rikka with Stone-Paper-Scissorsit
題意:每一個人有三種牌,"石頭、剪刀、布" ,詢問第一我的贏第二我的的指望event
思路:考慮每一次出牌的機率相同,那麼答案就是(贏的狀況種數 - 輸的狀況) / 牌數 那麼全部贏輸狀況種類數就是 $\frac {a_1 *(b_2 - c_2) + b_1 * (c_2 - a_2) + c_1 * (a_2 - b_2)} {a + b + c} $class
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 typedef long long ll; 6 7 ll gcd(ll a, ll b) 8 { 9 return b == 0 ? a : gcd(b, a % b); 10 } 11 12 ll a1, b1, c1, a2, b2, c2; 13 14 int main() 15 { 16 int t; 17 scanf("%d", &t); 18 while(t--) 19 { 20 scanf("%lld %lld %lld %lld %lld %lld", &a1, &b1, &c1, &a2, &b2, &c2); 21 ll ans = a1 * (b2 - c2) + b1 * (c2 - a2) + c1 * (a2 - b2); 22 if(ans % (a1 + b1 + c1) == 0) 23 { 24 ans /= a1 + b1 + c1; 25 printf("%lld\n", ans); 26 } 27 else 28 { 29 int flag = 0; 30 if(ans < 0) 31 { 32 ans = -ans; 33 flag = 1; 34 } 35 ll ans2 = a1 + b1 + c1; 36 ll GCD = gcd(ans, ans2); 37 ans /= GCD; 38 ans2 /= GCD; 39 if(flag) printf("-"); 40 printf("%lld/%lld\n", ans, ans2); 41 } 42 } 43 return 0; 44 }
E - Rikka with Rain
留坑。
F - Rikka with Spanning Tree
留坑。
G - Rikka with Treasure
留坑。
H - Rikka with Line Graph
留坑。
I - Rikka with Bubble Sort
留坑。
J - Rikka with Time Complexity
留坑。
K - Rikka with Badminton
題意:四種人,一種人啥都沒有,一種人有拍,一種人有球,一種人有拍有球,求方案數使得有兩拍一球
思路:考慮三種選擇方案
1° 兩個有拍+一個有球
2°兩個有拍有球
3°一個有拍,一個有拍有球
答案就是$2^a \cdot 2^c \cdot (2^b - 1) \cdot (2^d - 1) + 2^a \cdot 2^c \cdot (2^d - 1 - d) + 2^a \cdot (2^b - 1 - b) \cdot (2^c - 1)$
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define ll long long 5 6 const ll MOD = 998244353; 7 8 ll qmod(ll n) 9 { 10 ll res = 1; 11 ll base = 2; 12 while (n) 13 { 14 if (n & 1) res = res * base % MOD; 15 base = base * base % MOD; 16 n >>= 1; 17 } 18 return res; 19 } 20 21 int t; 22 ll a, b, c, d; 23 24 int main() 25 { 26 scanf("%d", &t); 27 while (t--) 28 { 29 scanf("%lld%lld%lld%lld", &a, &b, &c, &d); 30 ll n = a + b + c + d; 31 ll res = qmod(a) * qmod(c) % MOD * (qmod(b) - 1 + MOD) % MOD * (qmod(d) - 1 + MOD) % MOD; 32 res = (res + qmod(a) * qmod(c) % MOD * (qmod(d) - 1 - d + MOD) % MOD) % MOD; 33 res = (res + qmod(a) * (qmod(b) - 1 - b + MOD) % MOD * (qmod(c) - 1 + MOD)) % MOD; 34 printf("%lld\n", (qmod(n) - res + MOD) % MOD); 35 } 36 return 0; 37 }