QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#236785#7518. GCD of Pattern MatchingszlhcWA 228ms4336kbC++144.2kb2023-11-04 10:42:392023-11-04 10:42:39

Judging History

你现在查看的是最新测评结果

  • [2023-11-04 10:42:39]
  • 评测
  • 测评结果:WA
  • 用时:228ms
  • 内存:4336kb
  • [2023-11-04 10:42:39]
  • 提交

answer

#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
namespace io {
    char ibuf[1 << 22], *ihd = ibuf, *itl = ibuf;
    char getc() {
        if (ihd == itl) {
            ihd = ibuf;
            itl = ibuf + fread(ibuf, 1, 1 << 22, stdin);
            if (ihd == itl) return EOF;
        }
        return *(ihd++);
    }
    char obuf[1 << 22], *otl = obuf;
    void putc(char c) {
        if (otl - obuf == 1 << 22) {
            fwrite(obuf, 1, 1 << 22, stdout);
            otl = obuf;
        }
        *(otl++) = c;
    }
    void flush() { fwrite(obuf, 1, otl - obuf, stdout); }
}  
using io::putc;
template <typename T>
void read(T &x) {
    x = 0;
    bool sgn = false;
    char c = io::getc();
    for (; c < '0' || '9' < c; c = io::getc()) sgn ^= (c == '-');
    for (; '0' <= c && c <= '9'; c = io::getc()) x = x * 10 + c - '0';
    if (sgn) x = -x;
}
template <typename T>
void write(T x) {
    static char stk[40];
    int tp = 0;
    if (x < 0) {
        io::putc('-');
        x = -x;
    }
    do {
        stk[++tp] = x % 10 + '0';
        x /= 10;
    } while (x);
    while (tp) io::putc(stk[tp--]);
}
using namespace std;
__int128 gcd (__int128 a, __int128 b) {return b ? gcd(b, a % b) : a;}
int T, n, nxt[20], cnt[30];
char s[20];
__int128 pw[20];
vector <char> vec[20];
bool check (vector <char> x, vector <char> y) {
    sort(x.begin(), x.end()), sort(y.begin(), y.end());
    for (int i = 0; i < x.size(); i++) if (x[i] != y[i]) return 0;
    return 1;
}
int main() {
    scanf ("%d", &T);
    bool Flag = (T == 237);
    while (T--) {
        scanf ("%d%s", &n, s + 1);
        int len = strlen(s + 1);
        if (n == 2) {
            __int128 x = 0;
            for (int i = 1; i <= len; i++) x = x * 2 + (s[i] == s[1]);
            write(x), putc('\n');
            continue;
        }
        vector<__int128>val(26,0);
        __int128 cur = 1;
        for (int i = 1; i <= len; i++) {
            val[s[len - i + 1]-'a']+=cur,
            cur*=n;
        }
        vector<__int128>vals;
	    for(auto x:val)if(x!=0)vals.emplace_back(x);
        __int128 x = 0;
        sort(vals.begin(),vals.end());
        for(int i=1;i<vals.size();i++)x=gcd(x,vals[i]-vals[i-1]);
        for(auto y:vals)x=gcd(x,y);
        pw[0] = 1;
        for (int i = 1; i <= len; i++) pw[i] = n * pw[i - 1];
        for (int i = len; i >= 1; i--) if (len % i == 0) {
            for (int j = 0; j < i; j++) vec[j].clear();
            for (int j = 0; j < len; j++) vec[j % i].push_back(s[j + 1]);
            bool flag = 1;
            for (int j = 0; j < i; j++) flag &= check(vec[0], vec[j]);
            if (flag) {
                __int128 y = 0;
                for (int j = 0; j < i; j++) y += pw[j];
                x = x * y / gcd(x, y);
                break;
            }
        }
        for (int i = 1; i <= len; i++) cnt[s[i] - 'a']++;
        int y = 1;
        for (int j = 1; j < n; j++) if ((n - 1) % j == 0) {
            int num = 0, lst = 0;
            for (int i = 0; i < 26; i++) if (cnt[i] && (!lst || cnt[i] % j == lst)) {
                num++;
                lst = cnt[i] % j;
            }
            if (!lst || (num == n && (n * (n - 1) / 2 * lst) % j == 0)) y = y * j / gcd(y, j);
        }
        x = x * y / gcd(x, y);
        y = 1;
        for (int j = 1; j <= n + 1; j++) if ((n + 1) % j == 0) {
            vec[0].clear(), vec[1].clear();
            for (int i = 1; i <= len; i += 2) cnt[s[i] - 'a']++;
            for (int i = 0; i < 26; i++) {
                vec[0].push_back(cnt[i] % j);
                cnt[i] = 0;
            }
            for (int i = 2; i <= len; i += 2) cnt[s[i] - 'a']++;
            for (int i = 0; i < 26; i++) {
                vec[1].push_back(cnt[i] % j);
                cnt[i] = 0;
            }
            bool flag = 1;
            for (int i = 0; i < 26; i++) flag &= (vec[0][i] == vec[1][i]);
            if (flag) y = y * j / gcd(y, j);
        }
        x = x * y / gcd(x, y);
        if (Flag && x == 21) printf ("%d %s\n", n, s + 1);
        write(x), putc('\n');
        for (int i = 0; i < 26; i++) cnt[i] = 0;
    }   
    return io::flush(), 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3688kb

input:

5
10 ccpcccpc
10 cpcpcp
10 cpc
4 cpccpc
4 dhcp

output:

10001
10101
1
65
3

result:

ok 5 number(s): "10001 10101 1 65 3"

Test #2:

score: 0
Accepted
time: 0ms
memory: 3688kb

input:

30
2 ab
3 abc
4 abcd
5 abcde
6 abcdef
7 abcdefg
8 abcdefgh
9 abcdefghi
10 abcdefghij
11 abcdefghijk
12 abcdefghijkl
13 abcdefghijklm
14 abcdefghijklmn
15 abcdefghijklmno
16 abcdefghijklmnop
16 a
16 ab
16 abc
16 abcd
16 abcde
16 abcdef
16 abcdefg
16 abcdefgh
16 abcdefghi
16 abcdefghij
16 abcdefghijk
...

output:

2
1
3
2
5
3
7
4
9
5
11
6
13
7
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

result:

ok 30 numbers

Test #3:

score: 0
Accepted
time: 0ms
memory: 3660kb

input:

12
10 abccbaabc
10 abcdeedcba
10 abccbaabccba
3 abccbaabccba
4 abcddcba
4 abcddcbaabcddcba
5 online
5 onlie
6 online
3 ccc
10 ccc
16 aaaaaaaaaaaaaaaa

output:

3
11
11000011
2920
15
983055
1
2
1
13
111
1229782938247303441

result:

ok 12 numbers

Test #4:

score: 0
Accepted
time: 0ms
memory: 3724kb

input:

21
13 abcccbbaccca
11 abcdcdeebdcdca
15 abcdcdeebdcdca
11 abcdcdeebdcacd
15 abcdcdeebdcacd
12 abcdcdeebbae
14 abcbadcbabcd
14 abcbaccbacbb
14 aaaaaabaabbab
10 aaaaabaababbb
9 aaaaabaababb
14 aaaaabaabbaba
10 aaaaabbaabaab
11 aaaaabbabbaabb
14 aaaababbbbbaba
12 aaaabbababbb
12 aaabaabbabab
13 aabaaab...

output:

183
4
4
4
4
1
38221
183
1
1
820
1
1
12
24326193
145
133
157
1064
1
145

result:

ok 21 numbers

Test #5:

score: 0
Accepted
time: 0ms
memory: 3952kb

input:

21
13 acccabbcccba
11 acdcdbeedcdcba
15 acdcdbeedcdcba
11 dcacdbeedcdcba
15 dcacdbeedcdcba
12 eabbeedcdcba
14 dcbabcdabcba
14 bbcabccabcba
14 babbaabaaaaaa
10 bbbabaabaaaaa
9 bbabaabaaaaa
14 ababbaabaaaaa
10 baabaabbaaaaa
11 bbaabbabbaaaaa
14 ababbbbbabaaaa
12 bbbababbaaaa
12 bababbaabaaa
13 bbababa...

output:

915
4
4
4
4
5
38221
183
157
79
5740
157
79
516
24326193
1015
665
785
1064
11
1015

result:

ok 21 numbers

Test #6:

score: 0
Accepted
time: 1ms
memory: 3908kb

input:

96
15 abbbcaacccba
16 cabacaabbccba
16 bcbbaaccabcba
16 bbccaacbabcba
16 bcbabbccaacba
16 abcacbcaccbba
16 accabcbabcbba
15 ccaaabccbbba
15 bbaaabbbbbba
16 abababbbbba
11 abbaabaabbbbba
16 ababbaaabbbbba
16 abbbaaaabbbbba
11 bababaababbbba
11 bababaabbbba
12 aababaabbbba
15 bbaaabbbba
16 aaaabbaaabb...

output:

416
157
157
157
157
157
157
416
416
89
516
1921
731
86
117
1015
176
731
187
665
2011170
516
785
2989355
40543655
63
67
731
731
86
1921
176
1357265
416
1015
416
416
176
785
731
1357265
516
86
63
1015
117
86
516
731
67
665
187
1921
86
516
516
86
665
63
785
187
2011170
1921
89
117
665
2989355
40543655
...

result:

ok 96 numbers

Test #7:

score: 0
Accepted
time: 1ms
memory: 3688kb

input:

96
15 abcccaacbbba
16 abccbbaacabac
16 abcbaccaabbcb
16 abcbabcaaccbb
16 abcaaccbbabcb
16 abbccacbcacba
16 abbcbabcbacca
15 abbbccbaaacc
15 abbbbbbaaabb
16 abbbbbababa
11 abbbbbaabaabba
16 abbbbbaaabbaba
16 abbbbbaaaabbba
11 abbbbabaababab
11 abbbbaababab
12 abbbbaababaa
15 abbbbaaabb
16 abbbbaaabba...

output:

32
1
1
1
1
1
1
32
32
1
12
17
17
2
3
145
16
17
17
133
402234
12
157
2989355
40543655
3
1
17
17
2
17
16
271453
32
145
32
32
16
157
17
271453
12
2
3
145
3
2
12
17
1
133
17
17
2
12
12
2
133
3
157
17
402234
17
1
3
133
2989355
40543655
1
3
145
1
3
157
1
17
3
133
1
2989355
40543655
157
1
3
3
1
157
145
1
3
...

result:

ok 96 numbers

Test #8:

score: 0
Accepted
time: 228ms
memory: 4336kb

input:

100000
15 abbbcaacccba
16 cabacaabbccba
16 bcbbaaccabcba
16 bbccaacbabcba
16 bcbabbccaacba
16 abcacbcaccbba
16 accabcbabcbba
15 ccaaabccbbba
15 bbaaabbbbbba
16 abababbbbba
11 abbaabaabbbbba
16 ababbaaabbbbba
16 abbbaaaabbbbba
11 bababaababbbba
11 bababaabbbba
12 aababaabbbba
15 bbaaabbbba
16 aaaabba...

output:

416
157
157
157
157
157
157
416
416
89
516
1921
731
86
117
1015
176
731
187
665
2011170
516
785
2989355
40543655
63
67
731
731
86
1921
176
1357265
416
1015
416
416
176
785
731
1357265
516
86
63
1015
117
86
516
731
67
665
187
1921
86
516
516
86
665
63
785
187
2011170
1921
89
117
665
2989355
40543655
...

result:

ok 100000 numbers

Test #9:

score: 0
Accepted
time: 0ms
memory: 3688kb

input:

22
15 dacbcbdddaddcba
15 bacdcdddbaddcba
15 bdedacaebecdcba
15 bdddacadbdcdcba
15 baaadcaabdcdcba
15 bdcdacacbccdcba
16 acccacddbbcdcba
16 acaccaddbbcdcba
15 bdbdacabbbcdcba
15 badddcddbacdcba
15 bdadacaabacdcba
15 abcddadddbcbcad
15 abcddabdddcdcab
15 abcdcebeacadedb
15 abcdcdbdacadddb
15 abcdcdbaa...

output:

2651
2651
2651
2651
2651
2651
3003
77
2651
2651
2651
241
241
241
241
241
241
273
1
241
241
241

result:

ok 22 numbers

Test #10:

score: -100
Wrong Answer
time: 1ms
memory: 4068kb

input:

237
12 aaaaaaaa
12 aaaaaaaaa
4 aaaaaaaaaa
13 aaaaaaaaaaa
16 aaaaaaaaaaaa
6 aaaaaaaaaaaaa
6 aaaaaaaaaaaaaa
14 aaaababbbbbaba
14 aaaabbabba
8 aaabaabbbaa
4 aaabaabbbaabba
11 aaabababaaaa
7 aaabababbabbaa
16 aaabbabaabbbaa
3 aaabbbaaba
7 aaabbbaabaaa
11 aaabbbbabbaa
5 aaabbbbbbaaa
8 aabaabbababa
7 aaba...

output:

8 ababbabbababaa
4 adbdacbcdcba
39089245
469070941
349525
149346699503
18764998447377
2612138803
15672832819
24326193
75
89
145
14763
58
1921
44
208
156
3906
285
312
13
30583
70
16
29
468799645
58593
55
113
65
13
29
43
203
665
46873
1460
232
21
2343
65
516
73015558161
2380
51
32
1555
187245
53
35
11...

result:

wrong answer 1st numbers differ - expected: '39089245', found: '8'