睿抗第三题棋代码

发布于:2025-07-13 ⋅ 阅读:(15) ⋅ 点赞:(0)

好久没写这么又臭又长的代码了,存个档

写错字母改了我半小时。逻辑很简单就是模拟

#include<bits/stdc++.h>
using ll=long long;
#define int ll
std::vector<int> v;
std::map<std::array<int,4>,int> mp;
signed main(){
	int n,m,s;
	std::cin>>n>>m>>s;
	
	int a=0;
	int fena=0,fenb=0;
	for(int i=1;i<=s;i++){
		int isa,sx,sy,ex,ey;
		std::cin>>isa>>sx>>sy>>ex>>ey;
		
		int win=0;
		if(isa!=a){
			v.push_back(i);
//			std::cout<<"1111111111\n";
			continue;
		}
		if(sx>ex){
			int t=ex;
			ex=sx;
			sx=t;
		}
		if(sy>ey){
			int t=ey;
			ey=sy;
			sy=t;
		}
		//边不合法 
		if(sx<1||sx>n||sy<1||sy>m||ex<1||ex>n||ey<1||ey>m){
			v.push_back(i);
//			std::cout<<"1111111111\n";
			continue;
		}
		if((sx==ex&&ey==sy+1)||sy==ey&&ex==sx+1){
			
		}else{
			v.push_back(i);
//			std::cout<<"222222222211111\n";
			continue;
		}
		
		if(mp[{sx,sy,ex,ey}]){
			v.push_back(i);
//			std::cout<<"33333333333\n";
			continue;
		} 
		mp[{sx,sy,ex,ey}]=1;
//		std::cout<<"xxxxxxxxxxxpwfiojjiweg"<<sx<<sy<<ex<<ey;
		//check得分
		if(sx==ex){
			if(mp[{sx,sy,sx+1,sy}]&&mp[{ex,ey,sx+1,sy+1}]&&mp[{sx+1,sy,sx+1,sy+1}]){
				if(isa==0) fena++;
				else fenb++;
				win=1;
			}
			if(mp[{sx-1,sy,sx,sy}]&&mp[{sx-1,sy,sx-1,sy+1}]&&mp[{sx-1,sy+1,ex,ey}]){
				if(isa==0) fena++;
				else fenb++;
				win=1;
			}
		}else{
			if(mp[{sx,sy,sx,sy+1}]&&mp[{sx,sy+1,sx+1,sy+1}]&&mp[{ex,ey,sx+1,sy+1}]){
				if(isa==0) fena++;
				else fenb++;
				win=1;
			}
			if(mp[{sx,sy-1,sx,sy}]&&mp[{sx,sy-1,sx+1,sy-1}]&&mp[{sx+1,sy-1,ex,ey}]){
				if(isa==0) fena++;
				else fenb++;
				win=1;
			}
		}
		
		if(!win) a=!a;
	}
	if(v.empty()){
		std::cout<<"-1\n";
	}else{
		for(int i=0;i<v.size();i++){
			std::cout<<v[i];
			if(i!=v.size()-1) std::cout<<" ";
		}
		std::cout<<'\n';
	}
	
	if(fena>fenb){
		std::cout<<"0 ";
		std::cout<<fena;
	}else{
		std::cout<<"1 ";
		std::cout<<fenb;
	}
	return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到