厦门大学程序设计大赛月赛(同步赛)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; }