Submission #41881127
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
const int MOD=998244353;
using mint = atcoder::static_modint<MOD>;
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)(n);i++)
ll read(){ll r;scanf("%lld",&r);return r;}
const int N = 18;
bool solved[N][1<<18][N]; // mint = 0并不表示没计算过
mint ans[N][1<<18][N];
char s[N][N+1];
int m;
mint f(int r,int mask,int c){
if(mask == 0) return 1; // 所有列都删除了
if(r == -1) return 1; // 所有行都删除了
assert(r>=0);
assert(mask < (1<<m));
assert(c >= 0);
mint &res = ans[r][mask][c];
if(solved[r][mask][c]) return res;
if(!(mask & (1<<c))) { // 这列已经删掉
if(c) return res = f(r,mask,c-1);
else return res = f(r-1,mask,m-1);
}
solved[r][mask][c] = true;
int r1 = 0; // 同 row 1
int rq = 0; // 同 row question
int c1 = 0; // 同 col 1
int cq = 0; // 同 col question
rep(j,0,c) { // 左侧点统计时注意已经删除的列 看作是1
r1 += s[r][j] == '1' or !(mask & (1<<j));
rq += s[r][j] == '?' and (mask & (1<<j));
}
rep(i,0,r) {
c1 += s[i][c] == '1';
cq += s[i][c] == '?';
}
auto rmNothing=[&]()->mint{ return c?f(r,mask ,c-1):f(r-1,mask ,m-1); };
auto rmCol =[&]()->mint{ return c?f(r,mask-(1<<c),c-1):f(r-1,mask-(1<<c),m-1); };
auto rmRowCol =[&]()->mint{ return f(r-1,mask-(1<<c),m-1);};
auto rmRow =[&]()->mint{ return f(r-1,mask,m-1); };
auto fill0=[&](){ res += rmNothing(); }; // 填0
auto fill1=[&](){ // 填1
// 行列至少一个满
if(r1 == c and c1 == r) { // 行列已经全满
res += rmRowCol();
}else if(r1 == c) { // 行已经满,列任意
res += rmRow();
}else if(c1 == r) { // 列已经满,行任意
res += rmCol();
}else if(r1+rq != c and c1+cq == r) { // 行不能满,列可以满
res += rmCol();
}else if(r1+rq == c and c1+cq != r) { // 行可以满, 列不能满
res += rmRow();
}else if(r1+rq == c and c1+cq == r) { // 都可以满, 但都没满, 容斥
res += rmRow() + rmCol() - rmRowCol();
}else{ // 都不能满
// 失败
}
};
if(s[r][c] == '0'){ // 忽略行列选择
fill0();
}else if(s[r][c] == '1'){
fill1();
}else{ // == '?'
fill0();
fill1();
}
return res;
}
int main(){
int n=read();
m=read();
rep(i,0,n) scanf("%s",s[i]);
printf("%d\n",f(n-1,(1<<m)-1,m-1).val());
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | Ex - E or m |
| User | cromarmot |
| Language | C++ (GCC 9.2.1) |
| Score | 600 |
| Code Size | 2442 Byte |
| Status | AC |
| Exec Time | 3062 ms |
| Memory | 418512 KiB |
Compile Error
./Main.cpp: In function ‘ll read()’:
./Main.cpp:8:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
8 | ll read(){ll r;scanf("%lld",&r);return r;}
| ~~~~~^~~~~~~~~~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:83:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
83 | rep(i,0,n) scanf("%s",s[i]);
| ~~~~~^~~~~~~~~~~
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt, sample_02.txt, sample_03.txt |
| All | sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt, test_71.txt, test_72.txt, test_73.txt, test_74.txt, test_75.txt, test_76.txt, test_77.txt, test_78.txt, test_79.txt, test_80.txt, test_81.txt, test_82.txt, test_83.txt, test_84.txt, test_85.txt, test_86.txt, test_87.txt, test_88.txt, test_89.txt, test_90.txt, test_91.txt, test_92.txt, test_93.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| sample_01.txt | AC | 230 ms | 335484 KiB |
| sample_02.txt | AC | 214 ms | 335396 KiB |
| sample_03.txt | AC | 3062 ms | 418464 KiB |
| test_01.txt | AC | 212 ms | 335520 KiB |
| test_02.txt | AC | 210 ms | 335472 KiB |
| test_03.txt | AC | 210 ms | 335356 KiB |
| test_04.txt | AC | 210 ms | 335476 KiB |
| test_05.txt | AC | 209 ms | 335568 KiB |
| test_06.txt | AC | 211 ms | 335532 KiB |
| test_07.txt | AC | 209 ms | 335396 KiB |
| test_08.txt | AC | 209 ms | 335604 KiB |
| test_09.txt | AC | 210 ms | 335392 KiB |
| test_10.txt | AC | 209 ms | 335352 KiB |
| test_11.txt | AC | 210 ms | 335500 KiB |
| test_12.txt | AC | 213 ms | 335436 KiB |
| test_13.txt | AC | 211 ms | 335548 KiB |
| test_14.txt | AC | 209 ms | 335348 KiB |
| test_15.txt | AC | 209 ms | 335404 KiB |
| test_16.txt | AC | 210 ms | 335532 KiB |
| test_17.txt | AC | 209 ms | 335488 KiB |
| test_18.txt | AC | 210 ms | 335448 KiB |
| test_19.txt | AC | 210 ms | 335488 KiB |
| test_20.txt | AC | 255 ms | 358860 KiB |
| test_21.txt | AC | 209 ms | 335532 KiB |
| test_22.txt | AC | 209 ms | 335484 KiB |
| test_23.txt | AC | 210 ms | 335392 KiB |
| test_24.txt | AC | 209 ms | 335460 KiB |
| test_25.txt | AC | 385 ms | 344908 KiB |
| test_26.txt | AC | 210 ms | 335484 KiB |
| test_27.txt | AC | 209 ms | 335464 KiB |
| test_28.txt | AC | 210 ms | 335604 KiB |
| test_29.txt | AC | 211 ms | 335616 KiB |
| test_30.txt | AC | 208 ms | 335500 KiB |
| test_31.txt | AC | 210 ms | 335436 KiB |
| test_32.txt | AC | 3003 ms | 418508 KiB |
| test_33.txt | AC | 209 ms | 335784 KiB |
| test_34.txt | AC | 254 ms | 353824 KiB |
| test_35.txt | AC | 209 ms | 335568 KiB |
| test_36.txt | AC | 210 ms | 335640 KiB |
| test_37.txt | AC | 210 ms | 335396 KiB |
| test_38.txt | AC | 210 ms | 335492 KiB |
| test_39.txt | AC | 212 ms | 335572 KiB |
| test_40.txt | AC | 209 ms | 335488 KiB |
| test_41.txt | AC | 209 ms | 335688 KiB |
| test_42.txt | AC | 209 ms | 335512 KiB |
| test_43.txt | AC | 210 ms | 335864 KiB |
| test_44.txt | AC | 209 ms | 335492 KiB |
| test_45.txt | AC | 211 ms | 335348 KiB |
| test_46.txt | AC | 3053 ms | 418512 KiB |
| test_47.txt | AC | 564 ms | 386044 KiB |
| test_48.txt | AC | 209 ms | 336156 KiB |
| test_49.txt | AC | 2801 ms | 418364 KiB |
| test_50.txt | AC | 210 ms | 335348 KiB |
| test_51.txt | AC | 209 ms | 335448 KiB |
| test_52.txt | AC | 280 ms | 367444 KiB |
| test_53.txt | AC | 213 ms | 336232 KiB |
| test_54.txt | AC | 209 ms | 335488 KiB |
| test_55.txt | AC | 209 ms | 335492 KiB |
| test_56.txt | AC | 209 ms | 335568 KiB |
| test_57.txt | AC | 210 ms | 335544 KiB |
| test_58.txt | AC | 208 ms | 335352 KiB |
| test_59.txt | AC | 211 ms | 335436 KiB |
| test_60.txt | AC | 209 ms | 335592 KiB |
| test_61.txt | AC | 208 ms | 335612 KiB |
| test_62.txt | AC | 208 ms | 335608 KiB |
| test_63.txt | AC | 209 ms | 335604 KiB |
| test_64.txt | AC | 209 ms | 335584 KiB |
| test_65.txt | AC | 570 ms | 352880 KiB |
| test_66.txt | AC | 211 ms | 335488 KiB |
| test_67.txt | AC | 210 ms | 335576 KiB |
| test_68.txt | AC | 215 ms | 335968 KiB |
| test_69.txt | AC | 210 ms | 335372 KiB |
| test_70.txt | AC | 208 ms | 335524 KiB |
| test_71.txt | AC | 212 ms | 336604 KiB |
| test_72.txt | AC | 209 ms | 335464 KiB |
| test_73.txt | AC | 210 ms | 335436 KiB |
| test_74.txt | AC | 209 ms | 335524 KiB |
| test_75.txt | AC | 209 ms | 335676 KiB |
| test_76.txt | AC | 367 ms | 344712 KiB |
| test_77.txt | AC | 209 ms | 335632 KiB |
| test_78.txt | AC | 210 ms | 335596 KiB |
| test_79.txt | AC | 214 ms | 335748 KiB |
| test_80.txt | AC | 210 ms | 335672 KiB |
| test_81.txt | AC | 314 ms | 345956 KiB |
| test_82.txt | AC | 212 ms | 336672 KiB |
| test_83.txt | AC | 210 ms | 335812 KiB |
| test_84.txt | AC | 211 ms | 335524 KiB |
| test_85.txt | AC | 212 ms | 335540 KiB |
| test_86.txt | AC | 210 ms | 335784 KiB |
| test_87.txt | AC | 237 ms | 346356 KiB |
| test_88.txt | AC | 219 ms | 338596 KiB |
| test_89.txt | AC | 230 ms | 340088 KiB |
| test_90.txt | AC | 1948 ms | 399308 KiB |
| test_91.txt | AC | 210 ms | 335632 KiB |
| test_92.txt | AC | 213 ms | 335972 KiB |
| test_93.txt | AC | 2737 ms | 418464 KiB |