#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() { char c = getchar(); puts( c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ? "vowel" : "consonant" ); 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,m; string s; cin >> n >> m; while (n--) { cin >> s; cout << s << endl<< s << endl; } 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;
} int dp[maxn]; intmain() { string s; cin >> s; dp[0] = 1; for (int i = 1; i <= s.length(); ++i) { if (i >= 5) { dp[i] |= (dp[i - 5] && s.substr(i - 5, 5) == "dream"); dp[i] |= (dp[i - 5] && s.substr(i - 5, 5) == "erase"); } if (i >= 6) { dp[i] |= (dp[i - 6] && s.substr(i - 6, 6) == "eraser"); } if (i >= 7) { dp[i] |= (dp[i - 7] && s.substr(i - 7, 7) == "dreamer"); } } if (dp[s.length()]) puts("YES"); else puts("NO"); return0; }
D
题目大意: 给你 N 个城市,K 条公路,L
条铁路。你需要回答出任意一个城市,有多少城市和它公路连通,有多少城市和它铁路连通。
#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; } int n, k, l; constint N = 1e6 + 100; int f1[N]; int f2[N]; intfind(int x, int *fa) { return fa[x] == x ? x : fa[x] = find(fa[x], fa); } voidmerge(int x, int y, int *fa) { fa[find(x, fa)] = fa[find(y, fa)]; } map<pair<int,int>,int>mp; intmain() { cin >> n >> k >> l; for (int i = 1; i <= n; i++) { f2[i] = i; f1[i] = i; } for (int i = 1; i <= k; i++) { int x, y; cin >> x >> y; merge(x, y, f1); } for (int i = 1; i <= l; i++) { int x, y; cin >> x >> y; merge(x, y, f2); } for (int i = 1; i <= n; i++) { mp[{find(i, f1), find(i, f2)}]++; } for (int i = 1; i <= n; i++) { cout << mp[{find(i, f1), find(i, f2)}] << ' '; } cout << '\n'; return0; }