UvaLive-4851-Restaurant
2013-04-17 11:03
197 查看
这个题想了好久,最后还是做出来了。
其实就是按坐标更新的方法~~
代码:
其实就是按坐标更新的方法~~
代码:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=60001; const int inf=1<<28; int miny[maxn],maxy[maxn],h[maxn]; int main() { int T; scanf("%d",&T); int n,m; int x1,y1,x2,y2; while(T--) { scanf("%d%d",&n,&m); scanf("%d%d%d%d",&x1,&y1,&x2,&y2); if(x1>x2) { swap(x1,x2); swap(y1,y2); } for(int i=x1+1;i<x2;i++) { miny[i]=inf; maxy[i]=-inf; } for(int i=2;i<m;i++) { int ita,itb; scanf("%d%d",&ita,&itb); if(itb>=y1) miny[ita]=min(miny[ita],itb); if(itb<=y1) maxy[ita]=max(maxy[ita],itb); } for(int i=x1;i<=x2;i++) h[i]=min(y1-maxy[i],miny[i]-y1); h[x1]=0; for(int i=x1+1;i<x2;i++) h[i]=min(h[i],h[i-1]+1); h[x2]=0; for(int i=x2-1;i>x1;i--) h[i]=min(h[i],h[i+1]+1); long long ans=0; for(int i=x1;i<=x2;i++) if(h[i]) { ans++; ans+=min(h[i]-1,y1); ans+=min(h[i]-1,n-y1-1); } cout<<ans<<endl; } return 0; }
相关文章推荐
- uvalive 4851 Restaurant(扫描法)
- UVaLive 4851 UVa 1468 - Restaurant (思维)
- uvalive 4851 Restaurant(扫描法)
- UVALive - 4851 Restaurant
- UVALive - 4851 Restaurant 扫描
- uvalive 4851
- uvalive4327(单调队列优化)
- ZOJ1159 UVA755 UVALive5420 487-3279【查表】
- UVALive 6912 Prime Switch 状压DP
- UVALive6578-Trending Topic
- UVA Live 3713 Astronauts (2-SAT)
- uvalive3211+uvalive3713
- UVaLive4992:Jungle Outpost
- UVALive 7264 Kejin Game (最大流最小割)
- POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)
- uvalive4015 (树上背包)
- 的 & UVALive5903
- UVALive5346 UVA374 Big Mod【快速幂】
- UVALive 7267(数学暴力)
- UVALive - 6955 Finding Lines 随机算法