关于月赛T1
  • 板块灌水区
  • 楼主AMIRIOX無暝
  • 当前回复27
  • 已保存回复27
  • 发布时间2020/9/19 20:25
  • 上次更新2023/11/5 12:57:03
查看原帖
关于月赛T1
320697
AMIRIOX無暝楼主2020/9/19 20:25

RT, 蒟蒻做了好几次都挂了 第一次因为开了map所以MLE, 第二次用了字符串哈希结果还是TLE, 只拿了40分, 评价贴里面都说T1简单,,,所以要怎么搞啊

我的代码:

#include <cstring>
#include <iostream>
#include <map>
using namespace std;
const int base = 261;
const int mod = 10007;
int isSrchd[mod];
// map<string, int> ds;
inline int strHash(string str) {
    register int hashv = 1;
    for (register int i = 0; i < str.length(); i++) {
        hashv = (hashv * 1ll * base * str[i]) % mod;
    }
    return hashv;
}
inline int findst(string stra, string suba) {
    register int results = 0;
    char* resu = const_cast<char*>(stra.c_str());
    char* subst = const_cast<char*>(suba.c_str());
    while ((resu = std::strstr(resu, subst)) != nullptr) {
        ++results;
        ++resu;
    }
    return results;
}

signed main() {
    register int ans = 0;
    string x;
    cin >> x;
    // ds[x] = 1;
    // abababab
    // 01234567
    for (register int i = 0; i < x.length(); i++) {
        for (register int j = i; j < x.length(); j++) {
            string cur = x.substr(i, j - i);
            if (cur.empty()) continue;
            if (register int hashval = strHash(cur); !isSrchd[hashval]) {
                // ds[cur] = 1;
                isSrchd[hashval]++;
                int nu = findst(x, cur);
                if (nu > ans) ans = nu;
            }
        }
    }
    // for (auto iv = ds.begin(); iv != ds.end(); iv++) {
    //     if (iv->second > ans) ans = iv->second;
    // }
    cout << ans;
    return 0;
}
2020/9/19 20:25
加载中...