您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: