45分RE求调
查看原帖
45分RE求调
86789
_WAlkingDead楼主2022/10/4 07:38
#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
	int x1,y1,x2,y2,p;
}a[605];
vector <int> win;
double tot=0.0;
void solve(int cur,int x,int y,int X,int Y,int dep){
	if (x==X||y==Y) return;
	bool flag=false;
	for (int i=cur;i<win.size();i++) 
		if (a[win[i]].p>dep) {
			int x1=a[win[i]].x1,y1=a[win[i]].y1;
			int x2=a[win[i]].x2,y2=a[win[i]].y2;
			if (x1>X||x2<x||y1>Y||y2<y) continue;
			else if (x1<x&&y1<y&&x2>X&&y2>Y) return;
			else{
				flag=true;
				solve(cur+1,x,min(y2,Y),min(x2,X),Y,dep);
				solve(cur+1,min(X,x2),max(y1,y),X,Y,dep);
				solve(cur+1,max(x,x1),y,X,max(y1,y),dep);
				solve(cur+1,x,y,max(x1,x),min(y2,Y),dep);
				break;
			}
		}
	if (!flag) tot+=(double)abs((X-x)*(y-Y));
	return;
}
char op;
int main(){
	int qt=0,qw=-1;
	while (scanf("%c",&op)!=EOF){
		if (op=='s') {
			char id;
			scanf("(%c)",&id);
			int ID=id-'A';
			tot=0;
			solve(0,a[ID].x1,a[ID].y1,a[ID].x2,a[ID].y2,a[ID].p);
			printf("%.3f\n",tot/(double)abs((a[ID].x2-a[ID].x1)*(a[ID].y1-a[ID].y2))*(double)100);
		}
		if (op=='w') {
			char id;
			int x,y,X,Y;
			scanf("(%c,%d,%d,%d,%d)\n",&id,&x,&y,&X,&Y);
			int ID=id-'A';
			bool flag=false;
			for (int i=0;i<win.size();i++) if (win[i]==ID){
				flag=true;
				break;
			}
			a[ID].x1=min(x,X);
			a[ID].y1=min(y,Y);
			a[ID].x2=max(x,X);
			a[ID].y2=max(y,Y);
			qw++;
			a[ID].p=qw;
			if (!flag) win.push_back(ID);
		}
		if (op=='t') {//置顶
			char id;
			scanf("(%c)",&id);
			int ID=id-'A';
			qw++;
			a[ID].p=qw;
		}
		if (op=='b'){//置底
			char id;
			scanf("(%c)",&id);
			int ID=id-'A';
			qt--;
			a[ID].p=qt;
		}
		if (op=='d'){
			char id;
			scanf("(%c)",&id);
			int ID=id-'A';
			for (int i=0;i<win.size();i++) {
				if (win[i]==ID) {
					win.erase(win.begin()+i);
					break;
				}
			}
		}
	}
    return 0;
}
2022/10/4 07:38
加载中...