QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#266719 | #7733. Cool, It’s Yesterday Four Times More | time_interspace# | WA | 1ms | 4180kb | C++20 | 2.4kb | 2023-11-26 17:05:53 | 2023-11-26 17:05:54 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int p = 998244353;
#define ll long long
#define rep(i,j,k) for(int i = j;i <= k;++i)
#define map Map
#define pb push_back
#define mp make_pair
#define fr first
#define se second
int n,m,tot;
int xm,ym,xM,yM;
char s[1010];
bool map[1010][1010];
bool vis[1010][1010];
bool flag[1010];
struct fuck{
int deltax,deltay,size;
bitset<2010>f;
}a[1010];
vector< pair<int,int> >tmp;
void dfs(int x,int y) {
a[tot].size++;
vis[x][y] = true;
if( map[x-1][y] && !vis[x-1][y]) dfs(x-1,y);
if( map[x][y-1] && !vis[x][y-1] ) dfs(x,y-1);
if( map[x+1][y] && !vis[x+1][y] ) dfs(x+1,y);
if( map[x][y+1] && !vis[x][y+1] ) dfs(x,y+1);
xm = min( xm , x ); ym = min( ym , y );
xM = max( xM , x ); yM = max( yM , y );
tmp.pb(mp(x,y));
}
bool cmp(fuck a,fuck b) {
int sza = (a.deltax+1) * (a.deltay+1) , szb = (b.deltax+1) * (b.deltay+1);
return sza < szb;
// return a.size < b.size
}
void work() {
int ans = 0;
sort(a+1,a+tot+1,cmp);
rep(i,1,tot) flag[i] = true;
for(int i = 1;i <= tot;++i) {
for(int j = i+1;j <= tot;++j) if( a[i].deltax <= a[j].deltax && a[i].deltay <= a[j].deltay ) {
for(int dx = 0; dx <= a[j].deltax - a[i].deltax; ++ dx)
for(int dy = 0; dy <= a[j].deltay - a[i].deltay; ++dy) {
int delta = dx*m+dy;
if( ( (a[i].f << delta) & a[j].f ) == (a[i].f << delta) ) {
if( a[i].deltax == a[j].deltax &&
a[i].deltay == a[j].deltay &&
a[i].size == a[j].size )
flag[j] = false;
flag[i] = false;
}
}
}
// printf("*%d %d %d\n",i,flag[i],(int)a[i].size);
// rep(j,0,9) printf("%d",(int)a[i].f[j]); printf("\n\n");
if( flag[i] ) ans += a[i].size;
}
printf("%d\n",ans);
}
void reset() {
rep(i,1,n) rep(j,1,m) vis[i][j] = false , map[i][j] = false;
rep(i,1,tot) a[i].f.reset() , a[i].size = 0;
tot = 0;
}
int main() {
int T; scanf("%d",&T);
while(T--) {
reset();
scanf("%d%d",&n,&m);
rep(i,1,n) {
scanf("%s",s+1);
rep(j,1,m) map[i][j] = (s[j] == '.');
}
rep(i,1,n) rep(j,1,m) if(!vis[i][j] && map[i][j]) {
tmp.clear();
xm = max(n,m)+1; ym = max(n,m)+1;
xM = 0; yM = 0;
++tot;
dfs(i,j);
a[tot].deltax = xM - xm;
a[tot].deltay = yM - ym;
// printf("*%d\n",tot);
for( auto [x,y]:tmp ) {
int nx = x - xm,ny = y - ym;
// printf("#%d %d\n",nx,ny);
a[tot].f[ nx*m+ny ] = 1;
}
}
work();
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 4160kb
input:
4 2 5 .OO.. O..O. 1 3 O.O 1 3 .O. 2 3 OOO OOO
output:
3 1 0 0
result:
ok 4 lines
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 4180kb
input:
200 2 4 OOO. OO.. 2 3 OOO .O. 3 3 O.O OOO OO. 4 1 . . O O 1 2 .O 1 1 . 2 5 .OO.. .O.O. 2 1 O O 1 1 O 1 3 .OO 5 1 O O . O . 5 2 O. .. O. .O .. 5 3 ... ... .OO ..O OOO 3 5 ..O.O .O.O. .OO.O 5 2 .O OO O. O. .. 2 1 O O 3 5 .O.OO O...O ..OO. 1 5 ..... 5 1 O . O . . 5 3 OOO OO. .OO OO. O.O 2 1 O . 5 2 O. ...
output:
3 0 0 2 1 1 3 0 0 1 0 7 9 4 4 0 6 5 2 0 1 6 4 5 2 0 0 5 3 3 1 4 1 0 7 5 2 3 7 3 0 6 2 2 2 0 4 6 6 3 3 2 3 5 2 1 0 3 3 4 4 2 2 0 7 6 4 8 5 3 2 5 2 1 2 1 4 0 0 2 5 1 4 6 6 1 6 2 2 3 4 5 2 1 0 1 9 3 4 11 0 3 2 1 0 0 4 3 1 4 3 8 3 0 3 6 2 5 1 3 3 4 0 2 11 2 2 4 0 4 4 6 2 1 2 3 0 5 0 16 4 3 2 6 0 8 3 3 1...
result:
wrong answer 187th lines differ - expected: '5', found: '9'