所有数据,hack全过测评却全输出0
查看原帖
所有数据,hack全过测评却全输出0
925491
pengze36楼主2024/10/23 19:20

拜谢!!!

#include<iostream>
#include<cstdio>
#include<queue>
#define ll long long
using namespace std;
int n,m,q,r,k;
ll no[3005][3005];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
struct node{
   ll ty,st,x,y;
};
queue<node> q1,q2,q3;
node nxt(){
	node tmp;
	if(!q1.size()&&!q2.size()&&!q3.size()) return {-1,0,0,0};
	if(q1.size()&&!q2.size()&&!q3.size()){
		tmp=q1.front();
		q1.pop();
	}
	if(q2.size()&&!q1.size()&&!q3.size()){
		tmp=q2.front();
		q2.pop();
	}
	if(q3.size()&&!q1.size()&&!q2.size()){
		tmp=q3.front();
		q3.pop();
	}
    if(q1.size()&&q2.size()&&!q3.size()){
		if(q1.front().st<q2.front().st){//<=
			tmp=q1.front();
			q1.pop();
		}
		else {
			tmp=q2.front();
			q2.pop();
		}
	}
	 if(!q1.size()&&q2.size()&&q3.size()){
		if(q3.front().st<q2.front().st){
			tmp=q3.front();
			q3.pop();
		}
		else {
			tmp=q2.front();
			q2.pop();
		}
	}
	 if(q1.size()&&!q2.size()&&q3.size()){
		if(q1.front().st<=q3.front().st){
			tmp=q1.front();
			q1.pop();
		}
		else {
			tmp=q3.front();
			q3.pop();
		}
	}
	 if(q1.size()&&q2.size()&&q3.size()){
	    tmp=q1.front();
		if(tmp.st>q2.front().st) tmp=q2.front();
		if(tmp.st>q3.front().st) tmp=q3.front();
		if(tmp.ty==1) q1.pop();
		if(tmp.ty==2) q2.pop();
		if(tmp.ty==3) q3.pop();
	}
	return tmp;
}
bool check(int x,int y){
	if(x<1||x>n||y<1||y>m) return 0;
}
bool checkh(int x,int y){
		for(int i=0;i<4;++i){
			int xx=x+dx[i];
			int yy=y+dy[i];
		   if(check(xx,yy)&&no[xx][yy]==1) return 1;
		}
		return 0;
}
int main(){
//	freopen("lake6.in","r",stdin);
//	freopen("ans","w",stdout);
   scanf("%d%d%d%d%d",&n,&m,&q,&r,&k);
   while(q--){
   	int a1,b1,a2,b2;
   	scanf("%d%d%d%d",&a1,&b1,&a2,&b2);
   	no[a1][b1]++;
   	no[a1][b2+1]--;
   	no[a2+1][b1]--;
   	no[a2+1][b2+1]++;
}   	
for(int i=1;i<=n+1;++i){
   		for(int j=1;j<=m+1;++j){
   		  no[i][j]=no[i][j]+no[i-1][j]+no[i][j-1]-no[i-1][j-1];
   		//  cout<<no[i][j];
		   }
		  // puts("");
	   }
	while(r--){
		ll t,x,y;
		scanf("%lld%lld%lld",&t,&x,&y);
		q1.push({1,t,x,y});
   }
   while(1){
   ////	cout<<"(";
 //  cout<<"=="<<q1.size()<<" "<<q2.size()<<" "<<q3.size()<<endl;
   	node tmp=nxt();
   //	cout<<"opt"<<tmp.ty<<" "<<tmp.st<<" "<<tmp.x<<" "<<tmp.y<<endl;
   	if(tmp.ty==-1) break;
   	if(tmp.ty==1){
   	//	puts("1");
   		no[tmp.x][tmp.y]=2;
   		q2.push({2,tmp.st+1,tmp.x,tmp.y});
   		q3.push({3,tmp.st+k,tmp.x,tmp.y});
	   }
	else if(tmp.ty==2){
	//	puts("2");
		for(int i=0;i<4;++i){
			int xx=tmp.x+dx[i];
			int yy=tmp.y+dy[i];
			if(check(xx,yy)&&no[xx][yy]==0&&checkh(xx,yy)){
	          no[xx][yy]=2;//有了立马标记!!!! 
	          q2.push({2,tmp.st+1,xx,yy});
	          q3.push({3,tmp.st+k,xx,yy});
			}
		}
	}
	else if(tmp.ty==3){
	//	puts("3");
		bool f=0;
			for(int i=0;i<4;++i){
			int xx=tmp.x+dx[i];
			int yy=tmp.y+dy[i];
			if(check(xx,yy)&&no[xx][yy]!=0){
			 f=1;
			 break;
			}
		}
		if(!f) no[tmp.x][tmp.y]=0/*,cout<<"s"<<tmp.x<<" "<<tmp.y<<endl*/;
	}
//	cout<<")"<<endl;
   }
   int cnt=0;
   for(int i=1;i<=n;++i){
   	for(int j=1;j<=m;++j){
   		if(no[i][j]==2) /*cout<<i<<" "<<j<<endl,*/cnt++;
	   }
   }
   printf("%d\n",cnt);
	return 0;
} 
2024/10/23 19:20
加载中...