好久没写这么又臭又长的代码了,存个档
写错字母改了我半小时。逻辑很简单就是模拟
#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;
}