T1:
模拟题,结果只拿了50分,晚上在SLT的帮助下,玄学地AC了
比赛代码
#include
using namespace std;
string s[5], a, b, c, d, e;
int n, cnt;
void check() {
for (int i = 0; i < n / 2; i++) swap(a[i], a[n - i - 1]);
for (int i = 0; i <= 6; i++) {
d = b, e = c;
for (int j = 0; j < n; j++) d[j] = char((d[j] - 'a' + i) % 26 + 'a');
for (int j = 0; j < n; j++) e[j] = char((e[j] - 'a' - i + 26) % 26 + 'a');
if (a == d && a == e) {
cout <> n >> s[0] >> s[1] >> s[2];
for (int i = 0; i <= 2; i++) {
a = s[i];
cnt = i;
for (int j = 0; j <= 2; j++) {
if (j != cnt) {
b = s[j];
for (int k = 0; k <= 2; k++)
if (s[k] != a && s[k] != b)
c = s[k];
check();
}
}
}
return 0;
}
AC代码
#include
using namespace std;
string s[5], a, b, c, d, e;
int n;
void check() {
for (int i = 0; i < n / 2; i++) swap(a[i], a[n - i - 1]);
for (int i = 0; i <= 6; i++) {
d = b, e = c;
for (int j = 0; j < n; j++) d[j] = (d[j] - 'a' + i) % 26 + 'a';
for (int j = 0; j < n; j++) e[j] = (e[j] - 'a' - i + 26) % 26 + 'a';
if (a == d && a == e) {
cout <> n >> s[0] >> s[1] >> s[2];
for (int i = 0; i <= 2; i++) {
for (int j = 0; j <= 2; j++) {
if (j != i) {
for (int k = 0; k <= 2; k++)
if (j != k) {
a = s[i];
b = s[j];
c = s[k];
check();
}
}
}
}
return 0;
}
反正就挺离谱的,赛后我一直以为是check()函数写错了,结果没想到是下面的枚举写错了,现在还没有看出我原代码的错误(SLT是直接把我的枚举部分改成他自己写的了)
其他的竞赛:会就是会,不会就是不会;信竞:会不一定AC,不会可以骗分、打表
T2:
暴力,30分
但赛后看正解,发现我考试时想出的一个思路离AC只差一半。
T3:
考试时想出正解过度兴奋,忘记了取模……
AC代码
#include
using namespace std;
typedef long long ll;
const ll N = 1e6 + 7, mod = 1e9 + 7;
ll f[N], len, cnt, ans, nxt;
string s;
int main() {
freopen("string.in", "r", stdin);
freopen("string.out", "w", stdout);
cin >> s;
len = nxt = s.size();
for (int i = len - 1; i >= 0; i--) {
if (s[i] == 'a') {
cnt++;
f[cnt] = (nxt - i - 1 + f[cnt - 1] * 2 % mod) % mod;
ans = (ans + f[cnt]) % mod;
nxt = i;
}
}
cout << ans;
return 0;
}
T4:
啥也没写,0分
总结:今天考试的结果不太理想,很多细节还是要注意