//K #include<bits/stdc++.h> using namespace std; int n; vector<string>name[30]; int ans[30]; // 第几轮确定的答案 int cnt; bool fin[30]; void make(int round) // 第几轮 { map<string, int>check; vector<int>id[30]; int tot = 0; for (int i = 1; i <= n; i++) { if (fin[i]) continue; string s = ""; for (int j = 0; j < name[i].size(); j++) { if (j < round) s += name[i][j]; else s += name[i][j][0]; } if (!check[s]) { tot++; check[s] = tot; } id[check[s]].push_back(i); } for (int i = 1; i <= tot; i++) { if (id[i].size() == 1) { fin[id[i][0]] = 1; ans[id[i][0]] = round; cnt++; } } } int main() { cin >> n; cin.ignore(numeric_limits<streamsize>::max(), '\n'); for (int i = 1; i <= n; i++) { string s; getline(cin, s); string tmp = ""; for (int j = 0; j < s.size(); j++) { if (s[j] == ' ') { name[i].push_back(tmp); tmp = ""; } else tmp += s[j]; } if (!tmp.empty()) name[i].push_back(tmp); } for (int i = 0; cnt != n; i++) make(i); for (int i = 1; i <= n; i++) { string res = ""; for (int j = 0; j < name[i].size(); j++) { if (j < ans[i]) cout << name[i][j]; else cout << name[i][j][0]; } cout << '\n'; } return 0; }
//L #include<bits/stdc++.h> using namespace std; #define int long long int n, ans; signed main() { cin >> n; for (int b = 1; b * b <= n; b++) { int s = (n + b) / (b * (b + 1)); if (!s) break; ans += (s - 1) * b; ans += min(b, n - b * s * (b + 1) + b + 1); } cout << ans; return 0; }
//G #include<bits/stdc++.h> using namespace std;const int maxn = 2e5 + 10; int n; int a[maxn], ans;int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; sort (a + 1, a + n + 1); for (int i = 2; i <= n; i++) if (a[i] != a[i - 1]) ans++; cout << (ans <= 2) ? "YES" : "NO"; return 0; }
//A #include<bits/stdc++.h> using namespace std; #define int long long const int maxn = 2e5 + 10; int T, n; int a[maxn]; signed main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> T; while (T--) { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; int ans = 0; for (int s = 30; s >= 0; s--) { bool ok = 1; // 假设购买剩下的所有位 int mask = (ans | ((1 << s) - 1)); // 判断这一位取 0 能不能成功 int pre = (a[1] ^ (a[1] & mask)); // 操作第一个使得第一个最小 for (int i = 2; i <= n; i++) { if ((a[i] | mask) < pre) { ok = 0; break; } // 这是可以的,构造一个最小的满足的即可 // 先把这一个调到最小,然后逐步增大 int res = (a[i] ^ (a[i] & mask)); for (int j = 30; j >= 0; j--) { if (!((mask >> j) & 1)) continue; // 如果这一位取 0 完全做不到,那就只能取 1 if ((res | (mask & ((1ll << j) - 1))) < pre) res |= (1ll << j); } pre = res; } if (!ok) ans |= (1ll << s); } cout << ans << '\n'; } return 0; }
//D #include<bits/stdc++.h> using namespace std; const int maxn = 2e5 + 10; int n, x; int a[maxn], b[maxn], apos[maxn], bpos[maxn]; bool vis[maxn]; vector<int>ans; int main() { cin >> n >> x; for (int i = 1; i <= n; i++) cin >> a[i], apos[a[i]] = i; for (int i = 1; i <= n; i++) cin >> b[i], bpos[b[i]] = i; int l1 = 1, l2 = 1; while (1) { while (a[l1] != x && vis[a[l1]]) l1++; while (b[l2] != x && vis[b[l2]]) l2++; if (a[l1] == b[l2]) break; if (a[l1] == x) { vis[b[l2]] = 1; ans.push_back(b[l2]); } else if (b[l2] == x) { vis[a[l1]] = 1; ans.push_back(a[l1]); } else { if (bpos[a[l1]] <= apos[b[l2]]) { vis[a[l1]] = 1; ans.push_back(a[l1]); } else { vis[b[l2]] = 1; ans.push_back(b[l2]); } } } if (ans.size() == n - 1) { cout << "YES" << '\n'; for (int i = 0; i < n - 1; i++) cout << ans[i] << ' '; } else cout << "NO"; return 0; }
//C #include<bits/stdc++.h> #define F first #define S second using namespace std; vector<pair<int,int> > G[1000010]; vector<int> H[1000010],r,g,b; int x,y,z,col[1000010],vis[1000010],d[1000010],ans[1000010]; int id1(int p,int q){return (p-1)*y+q; } int id2(int p,int q){return (p-1)*z+q+x*y; } int id3(int p,int q){return (p-1)*z+q+x*y+x*z; } void add(int u,int v,int c){G[u].push_back({v,c});G[v].push_back({u,c}); } void addd(int u,int v,int c){if(!c){H[u].push_back(v);d[v]++;return ;}H[v].push_back(u);d[u]++; } void dfs(int u){vis[u]=1;for(int k=0;k<G[u].size();k++){pair<int,int> e=G[u][k];int v=e.first,w=e.second;col[v]=col[u]^w;if(!vis[v]){dfs(v);}} } int main(){ios::sync_with_stdio(0);cin>>x>>y>>z;for(int i=1;i<=x;i++){for(int j=1;j<=y;j++){string s;cin>>s;for(int k=1;k<=z;k++){add(id1(i,j),id2(i,k),s[k-1]=='R');add(id2(i,k),id3(j,k),s[k-1]=='B');}}}dfs(1);for(int i=1;i<=x;i++){for(int j=1;j<=y;j++){addd(i,j+x,col[id1(i,j)]);}}for(int i=1;i<=x;i++){for(int j=1;j<=z;j++){addd(i,j+x+y,col[id2(i,j)]);}}for(int i=1;i<=y;i++){for(int j=1;j<=z;j++){addd(i+x,j+x+y,col[id3(i,j)]);}}queue<int> q;for(int i=1;i<=x+y+z;i++){if(!d[i]){q.push(i);}}int ccnt=0;while(!q.empty()){int u=q.front();q.pop();ans[u]=++ccnt;for(int k=0;k<H[u].size();k++){int v=H[u][k];d[v]--;if(!d[v]){q.push(v);}}}for(int i=1;i<=x;i++){cout<<ans[i]<<" ";}cout<<endl;for(int i=1;i<=y;i++){cout<<ans[i+x]<<" ";}cout<<endl;for(int i=1;i<=z;i++){cout<<ans[i+x+y]<<" ";}cout<<endl;return 0; }
