UVA 12657 Boxes in a Line

#include<bits/stdc++.h>
using namespace std;
long long n,m,t,i,inv,cas,ans;
struct node{
	long long l,r;
}a[100010];
void link(long long x,long long y){
	a[x].r=y;
	a[y].l=x;
}
int main(){
	while(scanf("%lld%lld",&n,&m)==2){
		cas++;
		inv=0;
		for(i=0;i<=n;i++){
			a[i].l=i-1;
			a[i].r=i+1;
		}
		a[0].l=-1;
		a[n].r=-1;
		while(m--){
			scanf("%lld",&t);
			if(t==4)inv=!inv;
			else{
				long long x,y;
				scanf("%lld%lld",&x,&y);
				if((t==1||t==2)&&inv)t=3-t;
				long long lx=a[x].l,rx=a[x].r,ly=a[y].l,ry=a[y].r;
				if(t==1&&rx!=y){
					if(lx==y)t=3;
					else{
						link(lx,rx);
						link(ly,x);
						link(x,y);
					}
				}
				if(t==2&&lx!=y){
					if(rx==y)t=3;
					else{
						link(lx,rx);
						link(x,ry);
						link(y,x);
					}
				}
				if(t==3){
					if(rx==y){
						link(lx,y);
						link(x,ry);
						link(y,x);
					}
					else if(lx==y){
						link(ly,x);
						link(y,rx);
						link(x,y);
					}
					else{
						link(ly,x);
						link(x,ry);
						link(lx,y);
						link(y,rx);
					}
				}
			}
		}
		long long tt=0;
		ans=0;
		for(i=1;i<=n;i++){
			tt=a[tt].r;
			if(i%2==1)
				ans+=tt;
		}
		if(inv==0)printf("Case %lld: %lld\n",cas,ans);
		else printf("Case %lld: %lld\n",cas,(n+1)*n/2-ans);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值