UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212634#3836. 排列计数13270460609322070ms167304kbC++2.1kb2024-10-19 17:33:372024-10-19 18:37:07

answer

#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 600 + 5;
const int inf = 1e5;
const long long mod = 1e9 + 7;
int cnt, prime[inf];
bool vis[inf + 5];
long long C[maxn][maxn];
void init() {
    for (int i = 2; i <= inf; i++) {
        if (!vis[i]) prime[++cnt] = i;
        for (int j = 1; j <= cnt && i * prime[j] <= inf; j++) {
            vis[i * prime[j]] = true;
            if (i % prime[j] == 0) break;
        }
    }
    C[0][0] = 1;
    for (int i = 1; i <= 600; i++) {
        C[i][0] = 1;
        for (int j = 1; j <= i; j++) C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
    }
}
bool check(int x, int y) {
    for (int i = 1; i <= cnt; i++) {
        int cnt1 = 0, cnt2 = 0;
        for (; x % prime[i] == 0; cnt1++) x /= prime[i];
        for (; y % prime[i] == 0; cnt2++) y /= prime[i];
        if ((cnt1 + cnt2) & 1) return false;
    }
    return x == y;
}
int T, n, m;
int a[maxn], b[maxn], num[maxn], sum[maxn];
long long f[1 << 20][20], g[maxn][maxn];
int main() {
    init();
    scanf("%d", &T);
    while (T--) {
        m = 0;
        scanf("%d", &n);
        for (int i = 0; i < n; i++) {
            scanf("%d", a + i);
            int j = 1;
            for (; j <= m; j++) {
                if (check(a[i], b[j])) {
                    num[j]++;
                    break;
                }
            }
            if (j > m) b[++m] = a[i], num[m] = 1;
            a[i] = j;
        }
        long long ans = 0;
        if (n <= 18) {
            memset(f, 0, sizeof(f));
            for (int i = 0; i < n; i++) f[1 << i][i] = 1;
            for (int i = 1; i < (1 << n); i++)
                for (int j = 0; j < n; j++)
                    if (((i >> j) & 1) ^ 1)
                        for (int k = 0; k < n; k++)
                            if ((i >> k) & 1 && a[j] != a[k])
                                f[i | (1 << j)][j] = (f[i | (1 << j)][j] + f[i][k]) % mod;
            for (int i = 0; i < n; i++) ans = (ans + f[(1 << n) - 1][i]) % mod;
        } 
        printf("%lld\n", ans);
    }
    return 0;
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 4
Accepted
time: 57ms
memory: 167304kb

input:

3
9
3 3 12 2 5 9 6 9 12
9
3 12 3 1 3 4 3 4 1
9
4 7 3 4 2 1 3 1 12

output:

37440
2880
26784

result:

ok 3 number(s): "37440 2880 26784"

Test #2:

score: 4
Accepted
time: 58ms
memory: 167304kb

input:

3
9
2 2 3 2 3 2 1 3 3
9
3 12 3 1 8 4 8 4 1
9
4 3 1 2 2 4 1 4 12

output:

13824
22752
2880

result:

ok 3 number(s): "13824 22752 2880"

Test #3:

score: 4
Accepted
time: 55ms
memory: 167300kb

input:

3
9
142688 8128512 48834968 8128512 32845824 15095808 32845824 106256304 26295752
9
75427268 2192000...

output:

37584
2880
13824

result:

ok 3 number(s): "37584 2880 13824"

Test #4:

score: 4
Accepted
time: 66ms
memory: 167300kb

input:

3
9
88062123 88062123 48720400 8065600 97440800 76837548 85020800 76837548 14578572
9
2860000 163216...

output:

2880
22752
2880

result:

ok 3 number(s): "2880 22752 2880"

Test #5:

score: 4
Accepted
time: 77ms
memory: 167300kb

input:

3
14
3178431 152649728 117099999 5125428 49768252 363660928 39427850 62943232 3178431 4426506 131833...

output:

437283798
262822393
437283798

result:

ok 3 number(s): "437283798 262822393 437283798"

Test #6:

score: 4
Accepted
time: 166ms
memory: 167300kb

input:

3
16
1545282 112628708 2908125 1445625 136589332 36142429 269503828 36142429 2908125 67898372 788839...

output:

14414094
72255083
981412223

result:

ok 3 number(s): "14414094 72255083 981412223"

Test #7:

score: 4
Accepted
time: 537ms
memory: 167296kb

input:

3
18
171916800 71250 249023808 47278088 307436800 88125 19722516 88281600 31052472 109190400 4727808...

output:

623077510
693147110
858749358

result:

ok 3 number(s): "623077510 693147110 858749358"

Test #8:

score: 4
Accepted
time: 557ms
memory: 167304kb

input:

3
18
201436200 145303200 4826682 11714560 2336727 145303200 248706800 10600448 10600448 344786300 44...

output:

665836280
876677155
850239044

result:

ok 3 number(s): "665836280 876677155 850239044"

Test #9:

score: 0
Wrong Answer
time: 5ms
memory: 3456kb

input:

3
25
10145931 124099600 10145931 84640000 23374549 53138050 10145931 524800 620021061 321521805 1051...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '564677035', found: '0'

Test #10:

score: 0
Wrong Answer
time: 7ms
memory: 3456kb

input:

3
36
858246213 165765632 41295872 274942272 194212096 59846752 67831696 754216369 67831696 67589728 ...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '487365905', found: '0'

Test #11:

score: 0
Wrong Answer
time: 5ms
memory: 3460kb

input:

3
43
180948736 16070400 48926016 12443301 48926016 23653442 29451600 10020348 26696704 9883458 93085...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '346337755', found: '0'

Test #12:

score: 0
Wrong Answer
time: 10ms
memory: 3456kb

input:

3
48
303275700 317146752 773592768 357038291 180342936 357038291 250880 24122774 191498 90166680 383...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '900111223', found: '0'

Test #13:

score: 0
Wrong Answer
time: 9ms
memory: 3460kb

input:

3
50
54200832 256721322 267810625 6566833 237272737 21390625 744874800 296006000 721291875 7480225 1...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '934519143', found: '0'

Test #14:

score: 0
Wrong Answer
time: 10ms
memory: 3460kb

input:

3
120
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '52147493', found: '0'

Test #15:

score: 0
Wrong Answer
time: 11ms
memory: 3460kb

input:

3
138
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '612891723', found: '0'

Test #16:

score: 0
Wrong Answer
time: 8ms
memory: 3456kb

input:

3
162
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '434843275', found: '0'

Test #17:

score: 0
Wrong Answer
time: 11ms
memory: 3456kb

input:

3
185
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '331926949', found: '0'

Test #18:

score: 0
Wrong Answer
time: 15ms
memory: 3460kb

input:

3
199
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '480864616', found: '0'

Test #19:

score: 0
Wrong Answer
time: 19ms
memory: 3456kb

input:

3
140
454825431 218748672 521859924 214978676 377814488 78843600 18330048 255453264 25664841 6614150...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '599724215', found: '0'

Test #20:

score: 0
Wrong Answer
time: 30ms
memory: 3456kb

input:

3
170
62799680 49290795 59062216 259200000 9772992 149713920 204546351 26689864 115110400 49290795 2...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '517171519', found: '0'

Test #21:

score: 0
Wrong Answer
time: 27ms
memory: 3460kb

input:

3
188
23894112 87116724 182801234 46345552 25719300 182801234 105908077 235599925 262109925 54348048...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '354714011', found: '0'

Test #22:

score: 0
Wrong Answer
time: 30ms
memory: 3460kb

input:

3
198
24553280 17298000 740763184 96610680 411361280 38720 187876030 285738796 55660 38720 86050908 ...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '289048382', found: '0'

Test #23:

score: 0
Wrong Answer
time: 101ms
memory: 3456kb

input:

3
590
38449622 115600000 376521627 1510956 1444069 435573936 297048204 34413408 54189573 462250 1222...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '854594268', found: '0'

Test #24:

score: 0
Wrong Answer
time: 100ms
memory: 3456kb

input:

3
590
907000000 55918784 892000000 5241600 103421313 28336896 8510400 34848600 5225472 30666768 1779...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '314483534', found: '0'

Test #25:

score: 0
Wrong Answer
time: 99ms
memory: 3460kb

input:

3
599
21638400 21638400 345780750 430564352 25818296 4954880 77772992 6387084 11434863 402793472 311...

output:

0
0
0

result:

wrong answer 1st numbers differ - expected: '780906791', found: '0'