AT_abc301 复盘
A
一眼水,只需要遍历一遍数组,记录哪一个胜利场数先打到 \((n + 1) / 2\) 就好了。
AC code:
// LUOGU_RID: 139221441
#include <bits/stdc++.h>
using namespace std;
int n, c1, c2;
string s;
int main(){
cin >> n >> s;
for (int i = 0; i < n; i++){
if (s[i] == 'T') c1++;
else c2++;
if (c1 >= (n + 1) / 2) return cout << "T", 0;
if (c2 >= (n + 1) / 2) return cout << "A", 0;
}
return 0;
}
B
依旧很水,只需要看当前与下一个数之间的趋势,然后输出就好。
注意边界,如果输出一个区间包含前面但不含后面的话,最后一个数要单独输出。
AC code:
// LUOGU_RID: 139221974
#include <bits/stdc++.h>
using namespace std;
int n;
int a[105];
int main(){
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i < n; i++){
if (a[i] < a[i + 1]){
for (int j = a[i]; j < a[i + 1]; j++) cout << j << " ";
}
else {
for (int j = a[i]; j > a[i + 1]; j--) cout << j << " ";
}
}
cout << a[n] << endl;
return 0;
}
C
依旧是字符串,先记录下每一个字母的出现情况和两个字符串中 @
的数量。之后遍历一遍字母,如果缺失(两个字符串字母出现次数不同)的字母是 atcoder
中的一个,那么记录需要的 @
的数量。
最后判断所需 @
符是否超过字符串已有的,或者两个字符串剩的 @
符不同。
AC code:
// LUOGU_RID: 139224230
#include <bits/stdc++.h>
using namespace std;
string s, t;
int cnts, cntt;
int ms[30], mt[30];
int main(){
cin >> s >> t;
for (int i = 0; i < s.size(); i++){
if (s[i] == '@') cnts++;
if (t[i] == '@') cntt++;
if (s[i] != '@') ms[s[i] - 'a']++;
if (t[i] != '@') mt[t[i] - 'a']++;
}
for (char i = 'a'; i <= 'z'; i++){
if (ms[i - 'a'] != mt[i - 'a']){
if (i == 'a' || i == 't' || i == 'c' || i == 'o' || i == 'd' || i == 'e' || i == 'r'){
if (ms[i - 'a'] < mt[i - 'a']) cnts -= (mt[i - 'a'] - ms[i - 'a']);
else cntt -= (ms[i - 'a'] - mt[i - 'a']);
}
else return cout << "No", 0;
}
}
if (cnts < 0 || cntt < 0 || cnts - cntt != 0) return cout << "No", 0;
cout << "Yes";
return 0;
}
D
算是比较水的 D,只要先记录初始的数,特判一下是否大于 \(n\)。然后从高位到低位去看每一个 ?
是否能变成 \(1\),如果能,就加上这个数二进制还原回来的数,否则跳过。
注意:不开 long long
见祖宗。
AC code:
// LUOGU_RID: 139228615
#include <bits/stdc++.h>
#define int long long
using namespace std;
string s;
int n, sum, cnt = 1;
int a[65];
signed main(){
cin >> s >> n;
for (int i = s.size() - 1; i >= 0; i--) a[i] = cnt, cnt *= 2;
for (int i = 0; i < s.size(); i++) sum += (s[i] == '1') ? a[i] : 0;
if (sum > n) return cout << -1, 0;
for (int i = 0; i < s.size(); i++){
if (s[i] == '?' && sum + a[i] <= n) sum += a[i];
}
cout << sum << endl;
return 0;
}
标签:code,cout,int,abc301,++,RID,include,复盘
From: https://www.cnblogs.com/ccf-ioi/p/17895432.html