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 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;
}
}