链表.u12657置换
来源:互联网 发布:欧文总决赛场均数据 编辑:程序博客网 时间:2024/04/29 14:22
对一排数字输入命令来置换,看了网上的,觉得差不多了,自己不一定写出来
#include <iostream>
using namespacestd;
int lef[100005],righ[100005];
void link(int l,int r)
{
lef[r]=l;
righ[l]=r;
}
int main()
{
int n,m,kase=0;
while(~scanf("%d %d",&n,&m))
{
for(int i=1;i<=n;i++)
{
lef[i]=i-1;
righ[i]=(i+1)%(n+1);
}
lef[0]=n;
righ[0]=1;
int op,x,y,cnt=0;
while(m--)
{
scanf("%d",&op);
if(op==4)
{
cnt=!cnt;
}
else
{
scanf("%d %d",&x,&y);
int lx=lef[x],rx=righ[x],ly=lef[y],ry=righ[y];
if(op==3)
{
if(lx==y)
{
link(ly,x);
link(x,y);
link(y,rx);
}
elseif(rx==y)
{
link(lx,y);
link(y,x);
link(x,ry);
}
else
{
link(lx,y);
link(y,rx);
link(ly,x);
link(x,ry);
}
continue;
}
if((op==1||op==2)&&cnt)
{
op=3-op;
}
if(op==1)
{
if(lef[y]==x)
continue;
else
{
link(ly,x);
link(x,y);
link(lx,rx);
}
}
elseif(op==2)
{
if(righ[y]==x)
continue;
else
{
link(lx,rx);
link(y,x);
link(x,ry);
}
}
}
}
longlong a=0;
int b=0;
for(int i=1;i<=n;i++)
{
b=righ[b];
if(i%2)
a=a+b;
}
if(cnt&&n%2==0)
a=(longlong)n*(n+1)/2-a;
printf("Case %d: %lld\n",++kase,a);
}
return0;
}
- 链表.u12657置换
- 置换 置换群 应用
- 置换 置换群 应用
- 置换 置换群 应用
- String置换
- 置换算法
- 文件名置换
- 置换算法
- Cipher-----置换
- CARDS----置换
- 置换排列
- 置换群
- 置换群
- 置换表
- 置换群
- 置换数字
- 置换问题
- 置换群
- js关系运算符不能连续使用and why?
- j2se(四)_数组,时间日期
- Java数组和链表的底层实现
- 队列的创建于基本操作
- NNU_20161020_PAT5-3 逆序的三位数
- 链表.u12657置换
- Linux下修改pip源提高下载速度
- 20 款前端开发文档和指南(1)
- android之媒体硬解OMX的实现
- ajax请求知识
- 51Nod 1067 Bash游戏 V2
- Android布局概述
- Mybatis plugin 2.84(mybatis_plus)破解版
- Map接口