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