uva12657纯双链模拟+白书代码(link函数是神器)
来源:互联网 发布:windows xp 停止服务 编辑:程序博客网 时间:2024/04/29 22:10
纯按结构体写的双向链,速度性能不够
#include<cstdio>#include<cstring>#include<stack>#include<iostream>#include<string>using namespace std;const int maxn = 100000 + 5;struct node { int i; node* next; node* last;}nodes[maxn];int n, m, t, a, b;bool inv;int main() { while (scanf("%d%d", &n, &m)!=EOF) { memset(nodes, 0, sizeof(nodes)); nodes[0].next = &nodes[1]; nodes[n + 1].last = &nodes[n]; for (int i = 1; i <= n; i++) { nodes[i].i = i; nodes[i].next = &nodes[i + 1]; nodes[i].last = &nodes[i - 1]; } inv = 0; while (m--) { scanf("%d", &t); if (inv && (t == 1 || t == 2)) { t = 3 - t; } if (t == 4) { inv = !inv; } else { scanf("%d%d", &a, &b); } node* aq = nodes[a].last; node* ap = nodes[a].next; node* bq = nodes[b].last; node* bp = nodes[b].next; if (t == 1) { aq->next = ap; ap->last = aq; nodes[a].last = bq; nodes[a].next = nodes + b; bq->next = nodes + a; nodes[b].last = nodes + a; } else if (t == 2) { aq->next = ap; ap->last = aq; nodes[a].last = nodes + b; nodes[a].next = bp; nodes[b].next = nodes + a; bp->last = nodes + a; } else if (t == 3) { aq->next = nodes + b; ap->last = nodes + b; bq->next = nodes + a; bp->last = nodes + a; nodes[a].next = bp; nodes[a].last = bq; nodes[b].next = ap; nodes[b].last = aq; } else if (t == 4) { inv = ~inv; } } // node head=nodes[0]; int index=0; long long ans=0; // printf("%d\n", inv); if(0==inv){ for (node* i = nodes; i->next; i = i->next){ // printf("%d\t",i->i ); if(index%2==1)ans+=i->i; index++; } } else{ for (node* i = nodes+n+1; i->last; i = i->last){ // printf("%d\t",i->i ); if(index%2==1)ans+=i->i; index++; } } printf("\n%lld\n",ans); } return 0;}
白书代码
#include<cstdio>#include<algorithm>using namespace std;const int maxn = 100000 + 6;int left[maxn],right[maxn],inv;void link(int l,int r){ right[l]=r;left[r]=l;}int main() { int n; int m,kase=0; while(scanf("%d%d",&n,&m)==2){ for(int i=1;i<=n;i++){ left[i]=i-1; right[i]=(i+1)%(n+1); } int b=0; right[0]=1;left[0]=n; int op,x,y,inv=0; while(m--){ scanf("%d",&op); if(op==4)inv=!inv; else{ scanf("%d%d",&x,&y); // if(op==3&&right[y]==x)swap(x,y); if(op!=3&&inv)op=3-op; if(op==1&&x==left[y])continue; if(op==2&&x==right[y])continue; int lx=left[x],rx=right[x],ly=left[y],ry=right[y]; if(op==1){ link(lx,rx);link(ly,x);link(x,y); lx=left[x],rx=right[x],ly=left[y],ry=right[y]; } else if(op==2){ link(lx,rx);link(y,x);link(x,ry); } else if(op==3){ if(right[x]==y){link(lx,y);link(y,x);link(x,ry);} else{link(lx,y);link(y,rx);link(ly,x);link(x,ry);} } } } long long ans=0; for(int i=1;i<=n;i++){ b=right[b]; if(i%2==1) ans+=b; } if(inv&&n%2==0) ans=(long long)n*(n+1)/2-ans; printf("Case %d: %lld\n",++kase,ans ); } return 0;}
阅读全文
0 0
- uva12657纯双链模拟+白书代码(link函数是神器)
- UVA12657
- Anaconda+pycharm配置及设置代码自动提示(简直是神器啊)
- UVA12657 Boxes in a Line【双向链表】【数组模拟】
- 例题6-5 UVA12657 双向链表模拟
- Android模拟神器_Genymotion
- msflexgrid 是一个神器
- link函数
- ***UVA12657 Boxes in a Line ACM解题报告(链表)
- 【日常学习】【模拟双向链表】【疑问】Uva12657 - Boxes in a Line题解
- 为何说Android ViewDragHelper是神器 (实战)
- 模拟浏览器的神器 - HtmlUnit
- 代码编辑神器VIM
- 简化代码神器Lombok
- 代码三神器?
- alibaba 代码规范神器
- 使用 Xcode 工具(Network Link Conditioner)模拟网络状态
- JS神器-函数
- API学习java.lang.clone
- API学习java.lang.Object.finalize
- ACM中国国家集训队论文集目录(1999-2009)
- C语言-单链表的基本操作-严蔚敏版的数据结构
- Sqoop详细介绍包括:sqoop命令,原理,流程
- uva12657纯双链模拟+白书代码(link函数是神器)
- 【算法】一致性哈希算法
- private关键字
- FFMPEG默认配置项的设置如下
- Js遍历所有的Cookie
- tf矩阵乘法理解
- golang win7环境搭建
- golang 基础语法
- golang常用代码块