HDU 7064 - Singing Superstar

https://acm.hdu.edu.cn/showproblem.php?pid=7064

  • 注意开数组的大小
  • 注意优化(插入的时候判断长度是否可行)
const int maxn = 1e5 + 7;

int n, t, m, stp = 30;
int nex[maxn * 33][27], cnt;
vector<int> vec[maxn * 40];

void insert(char *s) {
    int l = strlen(s);
    for (int i = 0; i < l; i++) {
        int p = 0;
        for (int j = i; j < i + stp && j < l; j++) {
            int c = s[j] - ‘a‘;
            if (!nex[p][c])
                nex[p][c] = ++cnt;
            p = nex[p][c];
            if (vec[p].size() == 0 || j - vec[p].back() >= j - i + 1)
                vec[p].push_back(j);
        }
    }
}

int find(char *s) {
    int l = strlen(s), p = 0;
    for (int i = 0; i < l; i++) {
        int c = s[i] - ‘a‘;
        if (!nex[p][c])
            nex[p][c] = ++cnt;
        p = nex[p][c];
    }
    return vec[p].size();
}

char s[maxn];
char pt[maxn];

void solve() {
    scanf("%d", &t);
    while (t--) {
        scanf("%s", s);
        insert(s);
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) {
            scanf("%s", pt);
            int x = find(pt);
            printf("%d\n", x);
        }
        for (int i = 0; i <= cnt; i++) {
            vec[i].clear();
            for (int j = 0; j <= 26; j++)
                nex[i][j] = 0;
        }
        cnt = 0;
    }

HDU 7064 - Singing Superstar

上一篇:Mac Github:第一次上传成功,解决图片不可显示,Initial commit Untracked files


下一篇:java编写一个端口扫描器