QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#392157#8330. Count off 32745518585TL 1918ms86160kbC++202.7kb2024-04-17 10:23:252024-04-17 10:23:25

Judging History

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

  • [2024-04-17 10:54:24]
  • hack成功,自动添加数据
  • (/hack/598)
  • [2024-04-17 10:23:25]
  • 评测
  • 测评结果:TL
  • 用时:1918ms
  • 内存:86160kb
  • [2024-04-17 10:23:25]
  • 提交

answer

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
const int N=20001;
const ll P=1e9+7;
int n,pw[7][N],b[7];
ll f1[N][8][8][8],f2[N][8][8][8];
char a[N];
int main()
{
    for(int i=1;i<=6;++i)
    {
        pw[i][0]=1;
        for(int j=1;j<=10000;++j) pw[i][j]=pw[i][j-1]*i%7;
    }
    f1[0][0][0][0]=f2[0][1][1][1]=1;
    for(int i=1;i<=10000;++i)
    {
        for(int j1=0;j1<=6;++j1) for(int j2=0;j2<=6;++j2) for(int j3=0;j3<=6;++j3)
        {
            (f1[i][j1][j2][j3]+=f1[i-1][j1][j2][j3])%=P;
            (f2[i][j1][j2][j3]+=f2[i-1][j1][j2][j3])%=P;
            if(i%2==1)
            {
                (f1[i][(j1+pw[1][i])%7][(j2+pw[2][i])%7][(j3+pw[3][i])%7]+=f1[i-1][j1][j2][j3])%=P;
            }
            else
            {
                (f2[i][(j1+pw[1][i])%7][(j2+pw[2][i])%7][(j3+pw[3][i])%7]+=f2[i-1][j1][j2][j3])%=P;
            }
        }
    }
    for(int i=0;i<=10000;++i)
    {
        for(int j1=0;j1<=6;++j1) for(int j2=0;j2<=6;++j2) for(int j3=0;j3<=6;++j3) (f2[i][j1][j2][7]+=f2[i][j1][j2][j3])%=P;
        for(int j1=0;j1<=6;++j1) for(int j2=0;j2<=6;++j2) for(int j3=0;j3<=7;++j3) (f2[i][j1][7][j3]+=f2[i][j1][j2][j3])%=P;
        for(int j1=0;j1<=6;++j1) for(int j2=0;j2<=7;++j2) for(int j3=0;j3<=7;++j3) (f2[i][7][j2][j3]+=f2[i][j1][j2][j3])%=P;
    }
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",a+1);
        n=strlen(a+1);
        for(int i=1;i<=6;++i) b[i]=0;
        ll s=0;
        for(int i=n-1;i>=1;--i)
        {
            if(a[n-i]=='1')
            {
                for(int j1=0;j1<=6;++j1) for(int j2=0;j2<=6;++j2) for(int j3=0;j3<=6;++j3)
                {
                    if(f1[i-1][j1][j2][j3]==0) continue;
                    vector<int> p1={7,((-b[1]-j1)%7+7)%7,((-b[6]+j1)%7+7)%7},p2={7,((-b[2]-j2)%7+7)%7,((-b[5]+j2)%7+7)%7},p3={7,((-b[3]-j3)%7+7)%7,((-b[4]+j3)%7+7)%7};
                    if(p1[1]==p1[2]) p1.pop_back();
                    if(p2[1]==p2[2]) p2.pop_back();
                    if(p3[1]==p3[2]) p3.pop_back();
                    for(auto k1:p1) for(auto k2:p2) for(auto k3:p3)
                    {
                        int z=((k1<7)^(k2<7)^(k3<7))?-1:1;
                        s=(s+z*f1[i-1][j1][j2][j3]*f2[i-1][k1][k2][k3]%P)%P;
                    }
                }
                for(int j=1;j<=6;++j) b[j]=(b[j]+pw[j][i])%7;
            }
        }
        if(a[n]=='1')
        {
            for(int i=1;i<=6;++i) b[i]=(b[i]+1)%7;
            if([&](){for(int i=1;i<=6;++i) if(b[i]==0) return false; return true;}()) ++s;
        }
        printf("%lld\n",(s%P+P)%P);
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 31ms
memory: 84432kb

input:

5
1
1010
110101
1000111000
101101001000

output:

1
2
15
114
514

result:

ok 5 number(s): "1 2 15 114 514"

Test #2:

score: 0
Accepted
time: 72ms
memory: 84296kb

input:

10
1
11
1000
10111011
1000110100101001
11101110000001000011010011011000
110011000111110001101010101100100011010010101000011111001101011
11010111011101000010101111011111011011100001001101010011101011111111011011111101110110010011001101000001000111100010010111000010
10000000000000000000000000000000000...

output:

1
1
2
45
6591
814196699
193088128
849103726
497125329
363076920

result:

ok 10 numbers

Test #3:

score: 0
Accepted
time: 801ms
memory: 84784kb

input:

10
1
101
100101000
111111001111011001111100111
100001101010101000101110010111010010001101101110011111000001010001111100101010000
111001010100100100110011110111000111001001001001000100000011000110011000110101010010100000100101110101000011000011100010011001011000101110100111000110011011010111011111011...

output:

1
2
64
27062688
486363229
184013394
580592021
118930214
772664718
344619804

result:

ok 10 numbers

Test #4:

score: 0
Accepted
time: 1202ms
memory: 84564kb

input:

10
1
1011
1101001010001110
1000010101110010000010010000000000001010111001001001110011001101
1001100101110111001000100100110111110001110010111011010101010111011101111101111100010000001100001001011100111100010110011010000010000000001100111011000001110011010000100000110101010011111100010111111100011011...

output:

1
3
10053
860833891
537931408
329471109
368911735
157523156
595487313
534701861

result:

ok 10 numbers

Test #5:

score: 0
Accepted
time: 1468ms
memory: 85504kb

input:

10
1
11111
1010110010010000111001001
10011010100100001000110000111101101000111100001000000101010001100111111010001000101000000011100101000101100111100001001101100
11000100100010011101010101001011100010001100001010110011110101001101011000110001000111101010010000110111010001100100100111001000001000010...

output:

1
10
4692555
763463648
464152115
115362567
880780461
578723006
560068977
423846910

result:

ok 10 numbers

Test #6:

score: 0
Accepted
time: 1662ms
memory: 85040kb

input:

10
1
101011
100100110100111100001101000101011100
1011011000011001101101010110000111011001001100110101111100110000100100101010000000110110010001110011101011000001011001000010001011101110110100110010111111000101101010110000101010101011001111100111011001101111011101
101000000111000010111000110000011000...

output:

1
13
955673880
266148454
368723690
496979115
190983211
772121423
932555320
843716403

result:

ok 10 numbers

Test #7:

score: 0
Accepted
time: 1780ms
memory: 85668kb

input:

10
1
1101101
1100111111001000111100000010000111000000010101001
110111101101011000111101100110010011011100101110101111110011001111001101001000011001110011110101001110010110011110011001111010010101010011010011101101111010111000001110110111011011101000100001000001101110010111100110001110011101110111100...

output:

1
29
912933242
912560788
607401363
477602366
394403189
275067439
592568023
75193370

result:

ok 10 numbers

Test #8:

score: 0
Accepted
time: 1829ms
memory: 86160kb

input:

10
1
10000010
100101110110100111100000100011111111010001100010100001100110001
111111000010011010111011111110000010101101011110100001101011110000001111001110001111110101000000010000001011000101101011010111011101111110101001000110011101010000111001011111100100010000010110110101010001110100111110110001...

output:

1
32
959140870
614330473
849221876
787816311
359958989
239371459
534701861
254356877

result:

ok 10 numbers

Test #9:

score: 0
Accepted
time: 1918ms
memory: 85216kb

input:

10
1
111110011
111101001101011110100011110000100110011101010111111110100001111001101000100101101
11011010000110101011111110110011101010100100110001001111111011010000101111110001001011000011010101001000101110000100011011100101010110010101000101010111101100101110111100011011011000101101001001001100111...

output:

1
99
286317277
694681686
723919544
789291149
680541846
694957099
453387561
757810824

result:

ok 10 numbers

Test #10:

score: -100
Time Limit Exceeded

input:

10
1
1001001110
10110010111110100100111100111101101010111110111011001110000111101011011010110011110000000001110100
11000101011111110110100101100100100000010110001011100010101111111000000111000101100110111110101010111110010110111111110010110010001100000000111000101100010001110010001011111110101011111...

output:

1
120
987933828
449323095
435643580
557750562
122442298
758115947
388795572
87146822

result: