#include<bits/stdc++.h> usingnamespace std; using ll = longlong; constint maxn = 2e5 + 10; const ll mod = 1e9 + 7; ll inv[maxn], fac[maxn]; // 分别表示逆元和阶乘 // 快速幂 ll quickPow(ll a, ll b) { ll ans = 1; while (b) { if (b & 1) ans = (ans * a) % mod; b >>= 1; a = (a * a) % mod; } return ans; }
voidinit() { // 求阶乘 fac[0] = 1; for (int i = 1; i <= maxn; i++) { fac[i] = fac[i - 1] * i % mod; } // 求逆元 inv[maxn - 1] = quickPow(fac[maxn - 1], mod - 2); for (int i = maxn - 2; i >= 0; i--) { inv[i] = inv[i + 1] * (i + 1) % mod; } } ll C(int n, int m) { if (m > n) { return0; } if (m == 0) return1; return fac[n] * inv[m] % mod * inv[n - m] % mod; } ll get(ll a, ll b, ll c, ll d) { returnC(c - a + d - b, c - a) % mod; } intmain() { set<int>s; for(int i=1;i<=3;i++) { int x; cin>>x; s.insert(x); } cout<<s.size(); return0; }
#include<bits/stdc++.h> usingnamespace std; using ll = longlong; constint maxn = 2e5 + 10; const ll mod = 1e9 + 7; ll inv[maxn], fac[maxn]; // 分别表示逆元和阶乘 // 快速幂 ll quickPow(ll a, ll b) { ll ans = 1; while (b) { if (b & 1) ans = (ans * a) % mod; b >>= 1; a = (a * a) % mod; } return ans; }
voidinit() { // 求阶乘 fac[0] = 1; for (int i = 1; i <= maxn; i++) { fac[i] = fac[i - 1] * i % mod; } // 求逆元 inv[maxn - 1] = quickPow(fac[maxn - 1], mod - 2); for (int i = maxn - 2; i >= 0; i--) { inv[i] = inv[i + 1] * (i + 1) % mod; } } ll C(int n, int m) { if (m > n) { return0; } if (m == 0) return1; return fac[n] * inv[m] % mod * inv[n - m] % mod; } ll get(ll a, ll b, ll c, ll d) { returnC(c - a + d - b, c - a) % mod; } intmain() { int n,k; cin >> n >> k; ll ans = k; for (int i = 1; i < n; i++) ans *= k - 1; cout << ans << '\n'; return0; }
C
这道才是本场最难的题目。
第一步:先让x为a的倍数,然后让y为b的倍数。
1 2
x = a * ((x + a - 1) / a); y = b * ((y + b - 1) / b);
第二步:看谁偏大,直接改即可。
1 2 3 4 5 6 7 8
if (x / a > y / b) { y = x / a * b; } else { x = y / b * a; }
// LUOGU_RID: 173168498 #include<bits/stdc++.h> usingnamespace std; using ll = longlong; constint maxn = 2e5 + 10; const ll mod = 1e9 + 7; ll inv[maxn], fac[maxn]; // 分别表示逆元和阶乘 // 快速幂 ll quickPow(ll a, ll b) { ll ans = 1; while (b) { if (b & 1) ans = (ans * a) % mod; b >>= 1; a = (a * a) % mod; } return ans; }
voidinit() { // 求阶乘 fac[0] = 1; for (int i = 1; i <= maxn; i++) { fac[i] = fac[i - 1] * i % mod; } // 求逆元 inv[maxn - 1] = quickPow(fac[maxn - 1], mod - 2); for (int i = maxn - 2; i >= 0; i--) { inv[i] = inv[i + 1] * (i + 1) % mod; } } ll C(int n, int m) { if (m > n) { return0; } if (m == 0) return1; return fac[n] * inv[m] % mod * inv[n - m] % mod; } ll get(ll a, ll b, ll c, ll d) { returnC(c - a + d - b, c - a) % mod; } intmain() { ll x = 1; ll y = 1; int n; cin >> n; for (int i = 1; i <= n; i++) { ll a, b; cin >> a >> b; x = a * ((x + a - 1) / a); y = b * ((y + b - 1) / b); if (x / a > y / b) { y = x / a * b; } else { x = y / b * a; } } cout << x + y << '\n';