QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#266618 | #7733. Cool, It’s Yesterday Four Times More | time_interspace# | WA | 1ms | 3848kb | C++20 | 2.4kb | 2023-11-26 15:55:51 | 2023-11-26 15:55:51 |
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 * a.deltay , szb = b.deltax * b.deltay;
return sza < szb;
}
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) if(flag)
for(int dy = 0; dy <= a[j].deltay - a[i].deltay; ++dy) if(flag) {
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: 0
Wrong Answer
time: 1ms
memory: 3848kb
input:
4 2 5 .OO.. O..O. 1 3 O.O 1 3 .O. 2 3 OOO OOO
output:
*1 0 1 *2 0 2 *3 1 3 3 *1 1 1 1 *1 0 1 *2 0 1 0 0
result:
wrong answer 1st lines differ - expected: '3', found: '*1 0 1'