SGU128 Snake
来源:互联网 发布:mac破解软件首发论坛 编辑:程序博客网 时间:2024/05/18 02:01
注意:用vector离散化时,先sort,再unique。
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>#include<vector>using namespace std;int tree[10005],f[10005],n;vector<int> d;struct point{ int x,y,id; bool isl;}p[10005];bool cmpx(const point &a,const point &b){ if(a.x==b.x) return a.y<b.y; else return a.x<b.x;}bool cmpy(const point &a,const point &b){ if(a.y==b.y) return a.x<b.x; else return a.y<b.y;}void discretize(){ sort(d.begin(),d.end()); d.resize(distance(d.begin(),unique(d.begin(),d.end())));}int find(int idx){ if(f[idx]==idx) return idx; else return f[idx]=find(f[idx]);}void merge(int idx,int idy){ if(find(idx)==find(idy)) return ; else { f[f[idx]]=f[idy]; return ; }}int lowbit(int idx){ return idx&(-idx);}int query(int idx){ int i=idx,ret=0; while(idx>0) { ret+=tree[idx]; idx-=lowbit(idx); } return ret;}void update(int idx,int val){ int i=idx; while(idx<10005) { tree[idx]+=val; idx+=lowbit(idx); }}void work(){ memset(tree,0,sizeof(tree)); scanf("%d",&n); int i,len=0,idx1,idx2; for(i=1;i<=n;++i) f[i]=i; d.clear(); for(i=1;i<=n;++i) { scanf("%d %d",&p[i].x,&p[i].y); p[i].id=i; p[i].isl=false; d.push_back(p[i].y); } discretize(); sort(p+1,p+n+1,cmpy); for(i=1;i<=n;i+=2) { if(p[i].y==p[i+1].y) { p[i].isl=true; len+=p[i+1].x-p[i].x; merge(p[i].id,p[i+1].id); } } sort(p+1,p+n+1,cmpx); for(i=1;i<=n;i+=2) { if(p[i].x==p[i+1].x) { len+=p[i+1].y-p[i].y; merge(p[i].id,p[i+1].id); } } for(i=2;i<=n;++i) { if(find(i)!=find(i-1)) { printf("0\n"); return ; } } for(i=1;i<=n;i+=2) { idx1=lower_bound(d.begin(),d.end(),p[i].y)-d.begin()+1; idx2=lower_bound(d.begin(),d.end(),p[i+1].y)-d.begin()+1; if(!p[i].isl) update(idx1,-1); if(!p[i+1].isl) update(idx2,-1); if(query(idx2)-query(idx1)!=0) { printf("0\n"); return ; } if(p[i].isl) update(idx1,1); if(p[i+1].isl) update(idx2,1); } printf("%d\n",len);}int main(){ work();}
- SGU128 Snake
- sgu128:Snake
- SGU128 Snake
- sgu128
- Snake
- snake
- snake
- Snake
- snake
- Snake
- snake
- Snake 算法
- Snake 算法
- Snake 算法
- snake 模型
- snake画图
- snake算法
- Snake心得
- Android自动化测试解决方案
- 程序猿段子(转自果壳网)
- ie6下png透明
- Android Canvas绘图详解(图文)
- windows核心编程-作业
- SGU128 Snake
- Android屏幕计量单位详解
- [Android面试题-3] Activity的四种加载模式
- Ubuntu java和环境变量常用配置
- Value Table Fixed Values and Check Table
- 详解Android系统如何找到最匹配的资源文件的(译)
- "equals"和"=="的区别
- FTP客户端实现断点续传
- 《离散数学及其应用》第六版中文版勘误表(更新中)