C/C++教程

Codeforces Round #732 (Div. 2)

本文主要是介绍Codeforces Round #732 (Div. 2),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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);
	}
}    
  
(官方讲得更好,注意到除了被拿走的字符串,其他的都有2个,所以字母都是偶数个,每个位置上出现奇数次的字母就是被拿走的,再利用异或2次为0的自反性质。)

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;
	}
}     
  
这篇关于Codeforces Round #732 (Div. 2)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!