QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#732010#5810. Doubly-sorted Gridlichenyu_ac10 379ms130712kbC++141.4kb2024-11-10 12:43:082024-11-10 12:43:08

Judging History

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

  • [2024-11-10 12:43:08]
  • 评测
  • 测评结果:10
  • 用时:379ms
  • 内存:130712kb
  • [2024-11-10 12:43:08]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=35,M=1<<20,mod=1e4+7;

int n,m;
int f[30][M],tmp[M];
char g[N][N];
vector<int> v;

int popcount(int x){
    int ret=0;
    while(x)ret++,x-=x&-x;
    return ret;
}

void solve(int testCase){
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)scanf("%s",g[i]);

    memset(f,0,sizeof(f));
    memset(tmp,0,sizeof(tmp));
    f[0][(1<<m)-1]=1;

    for(int i=0;i<26;i++){
        for(int s=0;s<1<<(n+m);s++){
            if(popcount(s)!=m)continue;
            f[i+1][s]=f[i][s];
            v.clear();
            int x=-1,y=m-1;
            int t=0;
            for(int j=0;j<n+m-1;j++){
                t+=(s>>j&1);
                (s>>j&1) ? y-- : x++;
                if((s>>j&3)==2){
                    // int x=j-t,y=m-t-1;
                    // printf("[%d, %d]\n",x,y);
                    if(g[x][y]=='.'||g[x][y]==i+'a')v.emplace_back(3<<j);
                }
            }
            // if(v.size())
                // for(int x:v)printf("%d ",x);puts("");
            for(int j=1;j<1<<v.size();j++){
                tmp[j]=(j==(j&-j)?v[__builtin_ctz(j)]:tmp[j^(j&-j)]^tmp[j&-j]);
                (f[i+1][s]+=(popcount(j)&1?1:-1)*f[i+1][tmp[j]^s]+mod)%=mod;
            }
        }
    }
    printf("Case #%d: %d\n",testCase,f[26][((1<<m)-1)<<n]);
}

int main(){
    int T;scanf("%d",&T);
    for(int i=1;i<=T;i++)solve(i);
    return 0;
}

詳細信息

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 379ms
memory: 130712kb

input:

40
4 4
....
....
....
....
4 4
abcd
bcde
cdef
defg
4 4
bbcc
ccde
cdef
deef
4 4
....
....
.r..
..e.
3 4
....
....
...g
1 3
f..
2 2
.b
bb
2 3
...
..f
4 4
....
....
..t.
..d.
3 3
.gn
...
...
4 4
...a
...b
...c
...d
4 4
...b
..bb
.bbb
bbbb
4 4
a...
.b..
..c.
...d
3 3
c..
glw
..w
1 4
....
1 3
d.v
4 2
..
...

output:

Case #1: 7285
Case #2: 1
Case #3: 1
Case #4: 0
Case #5: 718
Case #6: 231
Case #7: 2
Case #8: 686
Case #9: 0
Case #10: 3500
Case #11: 330
Case #12: 14
Case #13: 4096
Case #14: 2756
Case #15: 3737
Case #16: 19
Case #17: 8175
Case #18: 3737
Case #19: 7279
Case #20: 256
Case #21: 23
Case #22: 7569
Case ...

result:

ok 40 lines

Subtask #2:

score: 0
Time Limit Exceeded

Test #2:

score: 0
Time Limit Exceeded

input:

40
5 10
..........
..........
..........
..........
..........
10 10
....a.....
....c.....
....g.....
....j.....
....l.....
....m.....
....n.....
....q.....
....t.....
....v.....
10 10
..........
..........
..........
..........
..........
..........
..........
..........
...ok.....
..........
9 10
...

output:


result: