USACO Section 5.3 Window Area
来源:互联网 发布:windows许可证过期后果 编辑:程序博客网 时间:2024/06/05 23:43
题意:
对于Windows窗体有5种操作 放在最顶、放在最低、添加窗体、删除窗体、询问窗体有百分之几是可见的(没被挡住)
思路:
放在最顶和最低的操作就是变换一下顺序 我用一个数组存的窗体顺序
添加窗体就是在顶部加个窗体 删除窗体我是先把要删除的移到最顶 然后顺序数组减一
询问是考点 不过做过了矩形分割那个题思路很快就有了 除了我感觉代码写着有点麻烦没什么难度 就是递归的分割可见部分 最后求面积就好了
WA了一次 注意题意说的创建窗口时给出的是对角坐标 (不一定是左上角右下角、可能是左下角右上角 - -b)
代码:
/*ID: housera1PROG: windowLANG: C++*/#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;#define N 70#define M 500int tot=-1,ans;char order[N];struct win{ int up,dn,lf,rt;}f[M];void dfs(int up,int lf,int dn,int rt,int floor){ //printf("%d (%d,%d) (%d,%d)\n ",floor,up,lf,dn,rt); if(floor>tot) { ans+=(up-dn)*(rt-lf); return ; } int i=order[floor]; if( up<=f[i].dn || dn>=f[i].up || lf>=f[i].rt || rt<=f[i].lf ) dfs(up,lf,dn,rt,floor+1); else if( up<=f[i].up && dn>=f[i].dn && lf>=f[i].lf && rt<=f[i].rt ) return ; else { if(f[i].up>dn&&f[i].up<up) dfs(up,lf,f[i].up,rt,floor+1); if(f[i].dn>dn&&f[i].dn<up) dfs(f[i].dn,lf,dn,rt,floor+1); up=min(up,f[i].up); dn=max(dn,f[i].dn); if(f[i].lf>lf&&f[i].lf<rt) dfs(up,lf,dn,f[i].lf,floor+1); if(f[i].rt>lf&&f[i].rt<rt) dfs(up,f[i].rt,dn,rt,floor+1); }}int main(){ int Debug=0; if(!Debug) { freopen("window.in","r",stdin); freopen("window.out","w",stdout); } char op,id; int i,up,dn,lf,rt; while(~scanf("%c",&op)) { if(op=='w') { scanf("(%c,%d,%d,%d,%d)",&id,&lf,&up,&rt,&dn); if(dn>up) swap(dn,up); if(lf>rt) swap(lf,rt); f[id].up=up; f[id].dn=dn; f[id].lf=lf; f[id].rt=rt; tot++; order[tot]=id; } else if(op=='t'||op=='d') { scanf("(%c)",&id); for(i=0;i<tot;i++) { if(order[i]==id) swap(order[i],order[i+1]); } if(op=='d') tot--; } else if(op=='b') { scanf("(%c)",&id); for(i=tot;i>0;i--) { if(order[i]==id) swap(order[i],order[i-1]); } } else { scanf("(%c)",&id); for(i=0;i<=tot;i++) { if(order[i]==id) { ans=0; up=(f[id].up-f[id].dn)*(f[id].rt-f[id].lf); dfs(f[id].up,f[id].lf,f[id].dn,f[id].rt,i+1); printf("%.3f\n",100.0*ans/up); break; } } } getchar(); } return 0;}
0 0
- USACO Section 5.3 Window Area
- USACO Section 5.3 Window Area - 又一矩形覆盖问题
- Section 5.3 window area
- USACO 5.3 Window Area
- usaco 5.3.2 Window Area
- USACO Window Area 解题报告
- usaco 5.3 Window Area(模拟+矩形切割)
- C++——【USACO 5.3.2】——Window Area
- Window Area
- USACO Section 5.3 Big Barn - DP...
- USACO Section 5.3 Network of Schools
- USACO section 1.3
- USACO/milk Section 1.3
- USACO Section 1.1 题解
- USACO Section 1.2 题解
- USACO Section 1.3 题解
- USACO Section 1.4 题解
- USACO Section 1.5 题解
- 经纬财富:开封如何炒现货白银
- 新浪微博分享实现(Web认证)
- struts2学习笔记(5)----------配置result
- (@"^-?\d+(\.\d{2})?$");解释
- ora001658错误解决法
- USACO Section 5.3 Window Area
- uboot启动分析
- Jni函数调用
- DevExpress控件之"XtraForm——窗体"
- Ubuntu 12.04 Unity桌面环境VNC配置手记
- Git的Patch功能
- discuz7.2的安装
- Cocos2d-x学习笔记(4)
- 既然选择了远方,便只管风雨兼程---瞌睡虫的自白