QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#732010 | #5810. Doubly-sorted Grid | lichenyu_ac | 10 | 379ms | 130712kb | C++14 | 1.4kb | 2024-11-10 12:43:08 | 2024-11-10 12:43:08 |
Judging History
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 ...