厦门大学程序设计大赛月赛(同步赛)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;
}
全部评论
数据已修复(原本是是赛后新增的hack数据对比赛无影响)
点赞 回复 分享
发布于 2020-05-21 14:08
我整不动
点赞 回复 分享
发布于 2020-05-19 15:18

相关推荐

点赞 评论 收藏
分享
07-18 10:39
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务