求助 CF div.2 C
  • 板块学术版
  • 楼主dxrS
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/8/18 23:46
  • 上次更新2023/10/27 14:41:09
查看原帖
求助 CF div.2 C
563958
dxrS楼主2022/8/18 23:46

RT,思路是每次覆盖 11 数量最少的 L。

WA on #4

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int T,n,m,a[505][505];
struct node{
	int x,y,flg,cnt;
	inline bool operator <(const node &o) const{
		return cnt>o.cnt;
	}
};
priority_queue<node> q;
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;++i)
			for(int j=1;j<=m;++j)
				scanf("%1d",&a[i][j]);
		for(int i=1;i<=n;++i)
			for(int j=1;j<=m;++j){
				if(i>1&&j>1){
					q.push(node({i,j,1,a[i][j]+a[i-1][j]+a[i][j-1]}));
					q.push(node({i,j,5,a[i][j]+a[i-1][j]+a[i-1][j-1]}));
					q.push(node({i,j,9,a[i][j]+a[i][j-1]+a[i-1][j-1]}));
				}
				if(i>1&&j<m){
					q.push(node({i,j,2,a[i][j]+a[i-1][j]+a[i][j+1]}));
					q.push(node({i,j,6,a[i][j]+a[i-1][j]+a[i-1][j+1]}));
					q.push(node({i,j,10,a[i][j]+a[i][j+1]+a[i-1][j+1]}));
				}
				if(i<n&&j>1){
					q.push(node({i,j,3,a[i][j]+a[i+1][j]+a[i][j-1]}));
					q.push(node({i,j,7,a[i][j]+a[i+1][j]+a[i+1][j-1]}));
					q.push(node({i,j,11,a[i][j]+a[i][j-1]+a[i+1][j-1]}));
				}
				if(i<n&&j<m){
					q.push(node({i,j,4,a[i][j]+a[i+1][j]+a[i][j+1]}));
					q.push(node({i,j,8,a[i][j]+a[i+1][j]+a[i+1][j+1]}));
					q.push(node({i,j,12,a[i][j]+a[i][j+1]+a[i+1][j+1]}));
				}
			}
		int cnt=0;
		while(q.size()){
			node t=q.top();
			q.pop();
			int x=t.x,y=t.y;
			int a1,b1,a2,b2,a3,b3;
			if(t.flg==1){
				a1=x,b1=y;
				a2=x-1,b2=y;
				a3=x,b3=y-1;
			} else if(t.flg==2){
				a1=x,b1=y;
				a2=x-1,b2=y;
				a3=x,b3=y+1;
			} else if(t.flg==3){
				a1=x,b1=y;
				a2=x+1,b2=y;
				a3=x,b3=y-1;
			} else if(t.flg==4){
				a1=x,b1=y;
				a2=x+1,b2=y;
				a3=x,b3=y+1;
			} else if(t.flg==5){
				a1=x,b1=y;
				a2=x-1,b2=y;
				a3=x-1,b3=y-1;
			} else if(t.flg==6){
				a1=x,b1=y;
				a2=x-1,b2=y;
				a3=x-1,b3=y+1;
			} else if(t.flg==7){
				a1=x,b1=y;
				a2=x+1,b2=y;
				a3=x+1,b3=y-1;
			} else if(t.flg==8){
				a1=x,b1=y;
				a2=x+1,b2=y;
				a3=x+1,b3=y+1;
			} else if(t.flg==9){
				a1=x,b1=y;
				a2=x,b2=y-1;
				a3=x-1,b3=y-1;
			} else if(t.flg==10){
				a1=x,b1=y;
				a2=x,b2=y+1;
				a3=x-1,b3=y+1;
			} else if(t.flg==11){
				a1=x,b1=y;
				a2=x,b2=y-1;
				a3=x+1,b3=y-1;
			} else{
				a1=x,b1=y;
				a2=x,b2=y+1;
				a3=x+1,b3=y+1;
			}
			int X=a[a1][b1],Y=a[a2][b2],Z=a[a3][b3];
			a[a1][b1]=a[a2][b2]=a[a3][b3]=0;
			if(!X&&!Y&&!Z)
				continue;
			++cnt;
			if(X){
				int i=a1,j=b1;
				if(i>1&&j>1)
					q.push(node({i,j,1,a[i][j]+a[i-1][j]+a[i][j-1]}));
				if(i>1&&j<m)
					q.push(node({i,j,2,a[i][j]+a[i-1][j]+a[i][j+1]}));
				if(i<n&&j>1)
					q.push(node({i,j,3,a[i][j]+a[i+1][j]+a[i][j-1]}));
				if(i<n&&j<m)
					q.push(node({i,j,4,a[i][j]+a[i+1][j]+a[i][j+1]}));
			}
			if(Y){
				int i=a2,j=b2;
				if(i>1&&j>1)
					q.push(node({i,j,1,a[i][j]+a[i-1][j]+a[i][j-1]}));
				if(i>1&&j<m)
					q.push(node({i,j,2,a[i][j]+a[i-1][j]+a[i][j+1]}));
				if(i<n&&j>1)
					q.push(node({i,j,3,a[i][j]+a[i+1][j]+a[i][j-1]}));
				if(i<n&&j<m)
					q.push(node({i,j,4,a[i][j]+a[i+1][j]+a[i][j+1]}));
			}
			if(Z){
				int i=a3,j=b3;
				if(i>1&&j>1)
					q.push(node({i,j,1,a[i][j]+a[i-1][j]+a[i][j-1]}));
				if(i>1&&j<m)
					q.push(node({i,j,2,a[i][j]+a[i-1][j]+a[i][j+1]}));
				if(i<n&&j>1)
					q.push(node({i,j,3,a[i][j]+a[i+1][j]+a[i][j-1]}));
				if(i<n&&j<m)
					q.push(node({i,j,4,a[i][j]+a[i+1][j]+a[i][j+1]}));
			}
		}
		printf("%d\n",cnt);
	}
	return 0;
}
2022/8/18 23:46
加载中...