USACO window area 부유 법
/*
ID: m1500293
LANG: C++
PROG: window
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char s[80];
int buttom, top;
struct Window
{
char name;
int x1, y1, x2, y2;
}win[110];
int nwin;
void ocreate(char a[])
{
char n;
int x1, y1, x2, y2;
sscanf(a, "w(%c,%d,%d,%d,%d)", &n, &x1, &y1, &x2, &y2);
if(x1 > x2) swap(x1, x2);
if(y1 > y2) swap(y1, y2);
nwin++;
for(int i=nwin-1; i>=1; i--)
win[i] = win[i-1];
win[0] = (Window){n, x1, y1, x2, y2};
}
void otop(char s[])
{
char n = s[2];
int idx = -1;
for(int i=0; i<nwin; i++) if(win[i].name == n) {idx=i; break;}
Window tp = win[idx];
for(int i=idx; i>=1; i--) win[i] = win[i-1];
win[0] = tp;
}
void obt(char s[])
{
char n = s[2];
int idx = -1;
for(int i=0; i<nwin; i++) if(win[i].name == n) {idx=i; break;}
Window tp = win[idx];
for(int i=idx; i<nwin-1; i++)
win[i] = win[i+1];
win[nwin-1] = tp;
}
void od(char s[])
{
char n = s[2];
int idx = -1;
for(int i=0; i<nwin; i++) if(win[i].name == n) {idx=i; break;}
for(int i=idx; i<nwin-1; i++)
win[i] = win[i+1];
nwin--;
}
double area;
void dfs(int k, int x1, int y1, int x2, int y2)
{
if(k==-1) { area += (x2-x1)*(y2-y1); return; }
if(k>=0 && (win[k].x1>=x2||win[k].x2<=x1||win[k].y1>=y2||win[k].y2<=y1))
{
dfs(k-1, x1, y1, x2, y2);
return ;
}
if(win[k].x1>x1) { dfs(k-1, x1, y1, win[k].x1, y2); x1=win[k].x1; }
if(win[k].y1>y1) { dfs(k-1, x1, y1, x2, win[k].y1); y1=win[k].y1; }
if(win[k].x2<x2) { dfs(k-1, win[k].x2, y1, x2, y2); x2=win[k].x2; }
if(win[k].y2<y2) { dfs(k-1, x1, win[k].y2, x2, y2); y2=win[k].y2; }
}
void os(char s[])
{
area = 0.0;
int idx = -1;
for(int i=0; i<nwin; i++) if(win[i].name == s[2]) { idx=i; break; }
dfs(idx-1, win[idx].x1, win[idx].y1, win[idx].x2, win[idx].y2);
int x1=win[idx].x1, x2=win[idx].x2, y1=win[idx].y1, y2=win[idx].y2;
printf("%.3f
", area/((x2-x1)*(y2-y1))*100);
}
int main()
{
freopen("window.in", "r", stdin);
freopen("window.out", "w", stdout);
nwin = 0;
while(scanf("%s", s) != EOF)
{
switch(s[0])
{
case 'w':
ocreate(s);
break;
case 't':
otop(s);
break;
case 'b':
obt(s);
break;
case 'd':
od(s);
break;
case 's':
os(s);
break;
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.