Codeforces Round #715 (Div. 2)

A. Average Height

题意:设定两个相邻的整数相加之和能被2整除的数为“上镜”,求最多连续的“上镜”数。
思路:把奇和偶分开输出即可,相邻的奇数或者偶数一定是上镜。

#include <bits/stdc++.h>
#define llt long long
using namespace std;

bool cmp(int p,int q)
{
	return p%2<q%2;
}
int te,n,a[2010];

int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
	cin>>te;
	while(te--)
	{
		cin>>n;
		for(int i=1;i<=n;i++)cin>>a[i];
		sort(a+1,a+n+1,cmp);
		for(int i=1;i<=n;i++) cout<<a[i]<<' ';
		cout<<'\n';
	}
}

B. TMT Document

题意:给你一个母串,求能否使得这个串拆分成为n个子串为TMT,可以输出YES,否则NO
思路:从头到尾扫一遍再从尾到头,因为之前一直卡一个样例,心态崩坏复制再加了一发就过了=。=贴出来警告愚蠢的自己明天正常点


const int maxn = 1e5 + 1000;
int a[maxn];
int main()
{
	std::ios::sync_with_stdio(false);
	cin.tie(NULL);
	int n, i, j, t;
	cin >> t;
	string s1;
	while (t--) {
		cin >> n >> s1;
		int cnt = 0, cnm = 0;
		for (i = 0; i < n; i++) {
			if (s1[i] == 'T') {
				cnt++;
			}
			else {
				cnm++;
			}
		}
		if (cnm * 2 != cnt || n % 3 != 0) {
			scNO;
		}
		else {
			stack<int>mo;
			int cnt1 = 0, cc = 0, ff = 0;
			for (i = 0; i < n; i++) {
				if (s1[i] == 'T') {
					if (cnt1 < cnm)
						mo.push(1);
					else
						cc++;
				}
				else {
					cnt1++;
 
					if (mo.size() == 0) {
						ff = 1; break;
					}
					if (mo.top() != 1) {
						ff = 1; break;
					}
					else {
						mo.pop();
					}
				}
			}
			if (ff == 1) {
				scNO;
			}
			else {
				cc += mo.size();
				if (cc == cnm) {
					stack<int>m1;
					int cnt1 = 0, cc = 0, ff = 0;
					for (i = n-1; i >=0; i--) {
						if (s1[i] == 'T') {
							if (cnt1 < cnm)
								m1.push(1);
							else
								cc++;
						}
						else {
							cnt1++;
 
							if (m1.size() == 0) {
								ff = 1; break;
							}
							if (m1.top() != 1) {
								ff = 1; break;
							}
							else {
								m1.pop();
							}
						}
					}
					if (ff == 1) {
						scNO;
					}
					else {
						cc += m1.size();
						if (cc == cnm) {
							scYES;
						}
						else
							scNO;
					}
				}
				else
					scNO;
			}
		}
	}
	return 0;
}
上一篇:加密解密初体验


下一篇:Android开发实践:Android交叉编译工具链的使用