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