QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#266618#7733. Cool, It’s Yesterday Four Times Moretime_interspace#WA 1ms3848kbC++202.4kb2023-11-26 15:55:512023-11-26 15:55:51

Judging History

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

  • [2023-11-26 15:55:51]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3848kb
  • [2023-11-26 15:55:51]
  • 提交

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'