厦门大学程序设计大赛月赛(同步赛)A题
跳转链接
参考别人的代码,我自己写的用了自己用了几个月的快读模板,而且也试过改快读类模板还是疯狂TLE,96.55%
用cin或者scanf都是对的……真的搞不明白了。求大牛指点。
我的快读TLE
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
using namespace std;
#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
inline int read() {
int s = 0, w = 1; char ch = getchar();
while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }
while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
return s * w;
}
const int N = 2e5 + 7;
int a[N], l[N], r[N];
unordered_map<int, int> mp;
int dfs(int L, int R) {
if (R - L <= 0) return true;
int x = L, y = R, mid = -1;
while (x <= y) {
if (l[x] < L && R < r[x]) { mid = x; break; }
if (l[y] < L && R < r[y]) { mid = y; break; }
x++, y--;
}
if (mid == -1) return false;
return dfs(L, mid - 1) && dfs(mid + 1, R);
}
int main() {
int n = read(); //改成scanf
for (int i = 1; i <= n; ++i) a[i] = read(); //改成scanf就可以A……
for (int i = 1; i <= n; ++i) { //记录当前位置字母的前一次出现位置,没出现为0
if (!mp[a[i]]) l[i] = 0;
else l[i] = mp[a[i]];
mp[a[i]] = i;
}
mp.clear();
for (int i = n; i; --i) {
if (!mp[a[i]]) r[i] = n + 1;
else r[i] = mp[a[i]];
mp[a[i]] = i;
}
if (dfs(1, n)) puts("chong");
else puts("fuchong");
return 0;
}
查看26道真题和解析