UVA 12657(p144)----Boxes in a Line
2016-02-27 14:10
435 查看
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int maxn=1e5+50; int n,m,order,cas=0,x,y; int Left[maxn],Right[maxn]; void link(int L,int R) { Right[L]=R; Left[R]=L; } void prepare() { for(int i=1;i<=n;i++) { Left[i]=i-1; Right[i]=i+1; } Right[0]=1; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { prepare(); int inv=0; for(int i=0; i<m; i++) { scanf("%d",&order); if(order==4) inv=!inv; else { scanf("%d%d",&x,&y); if(order!=3&&inv) order=3-order; if(order==1&&Right[x]==y) continue; if(order==2&&Right[y]==x) continue; } int lx=Left[x],rx=Right[x]; int ly=Left[y],ry=Right[y]; if(order==1) { link(lx,rx); link(ly,x); link(x,y); } if(order==2) { link(lx,rx); link(x,ry); link(y,x); } if(order==3) { if(Right[x]==y) { link(lx,y); link(y,x); link(x,ry); } else { if(Right[y]==x) { link(ly,x); link(x,y); link(y,rx); } else { link(lx,y); link(y,rx); link(ly,x); link(x,ry); } } } } int tmp=0; LL ans=0; for(int i=1;i<=n;i++) { tmp=Right[tmp]; // cout<<tmp<<endl; if(i%2) ans+=tmp; } if(inv&&(n%2==0)) ans=(long long)(1+n)*n/2-ans; printf("Case %d: %lld\n",++cas,ans); } return 0; }
相关文章推荐
- eclipse中初探javadoc
- 杂谈之游戏开发中的控制器类
- UVA 12563(p274)----Jin Ge Jin Qu [h]ao
- 上传图片手机接口,mvc代码
- java设计模式--单例模式
- Java基础知识点4:继承
- 机器学习项目中常见的误区
- 数据结构算法之排序系列Java、C源码实现(5)--冒泡排序
- nefu Another kind of Fibonacci 458 (矩阵连乘)
- 51nod 算法马拉松11 A 翻硬币
- Android从一个应用程序启动第三方应用app
- 认识sqoop
- PowerShell-Exchange:Services Monitor Report
- JNI用javah命令生成头文件
- 冒泡循环加强版
- C++ 线程安全的singleton如何实现
- 算法导论第三版习题6.4
- UVA 12558(p216)----Eg[y]ptian Fractions(HARD version)
- 数据挖掘系列
- sqlite各函数详解