B. AquaMoon and Stolen String
这题就是把一个字符串拿走了,但是给了我们原来的和剩下的,所以别看中途配对又交换了,直接相减就行了。
string s[N], s1[N]; int main() { //ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while (t--) { int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) cin >> s[i]; for (int i = 1; i < n; i++) cin >> s1[i]; for (int i = 0; i < m; i++) { map<int, int=""> m; for (int j = 1; j <= n; j++) { m[s[j][i]]++; } for (int j = 1; j < n; j++) { m[s1[j][i]]--; } for (int j = 'a'; j <= 'z'; j++) if (m[j] == 1) putchar(j); } cout << endl; fflush(stdout); } }
C. AquaMoon and Strange Sort
这题比赛就不会了,还是思路重要啊。注意到每个数移动的距离都是偶数,所以原本奇数位置上的数字还会再奇数位置上,但是奇数位置之间可以随便交换。(偶数位置类似)。所以排序后检验即可。
int a[N],b[N][2]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while (t--) { memset(b, 0, sizeof(b)); int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; b[a[i]][i % 2]++; } sort(a + 1, a + 1 + n); for (int i = 1; i <= n; i++) { b[a[i]][i % 2]--; } bool f = true; for (int i = 1; i < +n; i++) { if (b[a[i]][0] != 0 || b[a[i]][1] != 0) { f = false; break; } } if (f) cout << "YES" << endl; else cout << "NO" << endl; } }