阅读背景:

UVA 12657(双向链表模拟)

来源:互联网 

模拟双向链表,自己的方法太繁琐了╥﹏╥...

这是我的代码(好渣)

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <ctime>
#include <iomanip>
using namespace std;
int l[100005],r[100005];
int main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
    int www=1;
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    int i;
    for(i=0;i<=n+2;i++)
    {
        l[i]=i-1;
        r[i]=i+1;
    }
    int fanzhuan=0;
    for(i=1;i<=m;i++)
    {
        int flag;
        scanf("%d",&flag);
        if(flag==4){
                fanzhuan+=1;
                continue;
        }
        else
        {
            if(flag==1&&fanzhuan%2==0||flag==2&&fanzhuan%2==1)
             {
                 int a,b;
                 scanf("%d%d",&a,&b);
				 int la=l[a];
                 int lb=l[b];
                 int ra=r[a];
                 int rb=r[b];
                 if(a==b)continue;
                 if(l[b]==a)continue;
                 if(r[b]==a)
                 {
                 	r[lb]=a;
                 	l[a]=lb;
                 	r[a]=b;
                 	l[b]=a;
                 	r[b]=ra;
                 	l[ra]=b;
                 	continue;
                 }
                 r[lb]=a;
                 l[b]=a;
                 r[la]=ra;
                 l[ra]=la;
                 l[a]=lb;
                 r[a]=b;
             }
             else if(flag==2&&fanzhuan%2==0||flag==1&&fanzhuan%2==1)
             {
                int a,b;
                 scanf("%d%d",&a,&b);
                 int la=l[a];
                 int lb=l[b];
                 int ra=r[a];
                 int rb=r[b];
                 if(a==b)continue;
                 if(r[b]==a)continue;
                 if(l[a]==b)
                 {
                 	r[la]=b;
                 	l[rb]=a;
                 	r[a]=rb;
                 	l[a]=b;
                 	l[b]=la;
                 	r[b]=a;
                 	continue;
                 }

                 r[b]=a;
                 l[rb]=a;
                 l[a]=b;
                 r[a]=rb;
                 r[la]=ra;
                 l[ra]=la;
             }
             else if(flag==3)
             {
                 int a,b;
                 scanf("%d%d",&a,&b);
                 int la=l[a];
                 int lb=l[b];
                 int ra=r[a];
                 int rb=r[b];
                 if(r[a]!=b&&l[a]!=b&&a!=b)
                 {
                 l[r[a]]=b;
                 r[l[b]]=a;
                 l[r[b]]=a;
                 r[l[a]]=b;
                 l[a]=lb;
                 r[a]=rb;
                 l[b]=la;
                 r[b]=ra;
                 }
                 else if(r[a]==b)
                 {
                     l[a]=b;
                     r[a]=rb;
                     r[b]=a;
                     l[b]=la;
                     r[la]=b;
                     l[rb]=a;
                 }
                 else if(r[b]==a)
                 {
                     l[b]=a;
                     r[b]=ra;
                     r[a]=b;
                     l[a]=lb;
                     r[lb]=a;
                     l[ra]=b;
                 }
             }
        }
//        if(fanzhuan%2==0)
//       {
//        long long  shu=1;
//        for(long long i=0;;)
//        {
//            i=r[i];
//            if(i==n+1||shu==n+1)break;
//            printf("%d ",i);
//            shu+=1;
//        }
//       }
//    else {
//        long long  shu=1;
//        for(long long i=n+1;;)
//        {
//            i=l[i];
//            if(i==0||shu==n+1)break;
//            printf("%d ",i);
//            shu+=1;
//        }
//        }
//        printf("\n");
    }
    long long sum=0;
    if(fanzhuan%2==0)
    {
        long long  shu=1;
        for(long long i=0;;)
        {
            i=r[i];
            if(i==n+1||shu==n+1)break;
//            printf("%d ",i);
            if(shu%2==1)sum+=i;
            shu+=1;
        }
    }
    else {
        long long  shu=1;
        for(long long i=n+1;;)
        {
            i=l[i];
            if(i==0||shu==n+1)break;
//            printf("%d ",i);
            if(shu%2==1)sum+=i;
            shu+=1;
        }
    }
    printf("Case %d: %lld\n",www,sum);
    www+=1;
    }
}
/*
21 6
3 19 19
2 2 4
2 20 14
1 8 9
3 20 16
3 16 2
*/
#inclu



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: