题目中的要求如果x在y的左边,不需要移动,x在y的右边,2操作不需要移动。

有一个问题是,如果x与y相邻,这时的swap操作变成了三个而不是四个,这点尤其需要注意,不然就会死循环。注意x是和y相邻,这时应该考虑x在y的左边还是在y的右边,因为修改指针的操作是有方向性的。

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10; struct Node {
int left,right,val;
}node[maxn]; void Link(int x,int y)
{
node[x].right=y;
node[y].left=x;
} int main()
{
int n,m,comm,x,y,rev_cnt;
while (scanf("%d%d",&n,&m)!=EOF) {
rev_cnt=0;
for (int i=1;i<=n+1;i++) {
node[i].val=i;
node[i].left=i-1;
node[i].right=i+1;
}
node[0].right=1;
node[n+1].val=0;
node[n+1].right=-1;
while (m--) {
scanf("%d",&comm);
if (comm!=4) {
scanf("%d%d",&x,&y);
} if (rev_cnt%2==1) {
if (comm==1) {
comm=2;
}
else if (comm==2) {
comm=1;
}
} if (comm==1) {
if (node[x].right==y) {
continue;
}
int lx=node[x].left,rx=node[x].right,ly=node[y].left,ry=node[y].right;
Link(lx,rx);
Link(ly,x);
Link(x,y);
}
else if (comm==2) {
if (node[y].right==x) {
continue;
}
int lx=node[x].left,rx=node[x].right,ly=node[y].left,ry=node[y].right;
Link(lx,rx);
Link(y,x);
Link(x,ry);
}
else if (comm==3) {
if (node[x].right==y) {
int lx=node[x].left,rx=node[x].right,ly=node[y].left,ry=node[y].right;
Link(lx,y);
Link(y,x);
Link(x,ry);
}
else if (node[y].right==x) {
int tmp=x;
x=y;
y=tmp;
int lx=node[x].left,rx=node[x].right,ly=node[y].left,ry=node[y].right;
Link(lx,y);
Link(y,x);
Link(x,ry);
}
else {
int lx=node[x].left,rx=node[x].right,ly=node[y].left,ry=node[y].right;
Link(lx,y);
Link(y,rx);
Link(ly,x);
Link(x,ry);
}
}
else {
rev_cnt++;
} // for (int i=node[0].right;i>0;i=node[i].right) {
// printf("%d\n",node[i].val);
// } }
int k;
if (rev_cnt%2==1&&n%2==0) {
k=0;
}
else {
k=1;
}
long long ans=0,cnt=1;
for (int i=node[0].right;i>0;i=node[i].right) {
if (cnt%2==k) {
ans+=node[i].val;
}
//printf("%d\n",node[i].val);
cnt++;
}
printf("%lld\n",ans);
}
}

National Contest for Private Universities (NCPU), 2019 C Boxes(双向链表)的更多相关文章

  1. The Preliminary Contest for ICPC Asia Shanghai 2019 C Triple(FFT+暴力)

    The Preliminary Contest for ICPC Asia Shanghai 2019 C Triple(FFT+暴力) 传送门:https://nanti.jisuanke.com/ ...

  2. 2015 Syrian Private Universities Collegiate Programming Contest 题解

    题目在这里>_< 发现这场比赛在网上没有完整的题解,甚至连题目代码都没人贴出来(大概是因为题目太水了吧...).所以宝宝就来写个题解,也就当作成长记录了233333 A. Window 题 ...

  3. 2015 Syrian Private Universities Collegiate Programming Contest

    A. Window B. Paper Game Des:给你一个矩形集合,一开始只有一个W*H的矩形.每次可以选一个矩形,切成两个并加入集合,长和宽必须是正整数.不能操作者输,求先手赢还是输.(1 ≤ ...

  4. The Preliminary Contest for ICPC Asia Nanjing 2019/2019南京网络赛——题解

    (施工中……已更新DF) 比赛传送门:https://www.jisuanke.com/contest/3004 D. Robots(期望dp) 题意 给一个DAG,保证入度为$0$的点只有$1$,出 ...

  5. 计蒜客 41391.query-二维偏序+树状数组(预处理出来满足情况的gcd) (The Preliminary Contest for ICPC Asia Xuzhou 2019 I.) 2019年徐州网络赛)

    query Given a permutation pp of length nn, you are asked to answer mm queries, each query can be rep ...

  6. The Preliminary Contest for ICPC Asia Xuzhou 2019 E XKC's basketball team [单调栈上二分]

    也许更好的阅读体验 \(\mathcal{Description}\) 给n个数,与一个数m,求\(a_i\)右边最后一个至少比\(a_i\)大\(m\)的数与这个数之间有多少个数 \(2\leq n ...

  7. [The Preliminary Contest for ICPC Asia Nanjing 2019] A-The beautiful values of the palace(二维偏序+思维)

    >传送门< 前言 这题比赛的时候觉得能做,硬是怼了一个半小时,最后还是放弃了.开始想到用二维前缀和,结果$n\leq 10^{6}$时间和空间上都爆了,没有办法.赛后看题解用树状数组,一看 ...

  8. 计蒜客 The Preliminary Contest for ICPC Asia Nanjing 2019

    F    Greedy Sequence You're given a permutation aa of length nn (1 \le n \le 10^51≤n≤105). For each  ...

  9. The Preliminary Contest for ICPC Asia Xuzhou 2019

    A:Who is better? 题目链接:https://nanti.jisuanke.com/t/41383 题意: 类似于有N个石子,先手第一次不能拿完,每次后手只能拿 1 到 前一次拿的数量* ...

随机推荐

  1. 记录 shell学习过程(5)continue break

    1.continue ;i<;i++)) do ];then continue fi echo $i done # ./continue.sh12346789 2.break ;i<;i+ ...

  2. 【网站】i新媒上线了!

    [New]i新媒上线了! i新媒,是新媒体人常用和必备的工具导航,我们整合了自媒体平台.行业资讯.运营营销.学习创业等常用的网站,让新媒体人更快地获取有用的知识. 访问链接:https://ixm.h ...

  3. 【Python】字符串切片

  4. SP1716 GSS3 - Can you answer these queries III - 动态dp,线段树

    GSS3 Description 动态维护最大子段和,支持单点修改. Solution 设 \(f[i]\) 表示以 \(i\) 为结尾的最大子段和, \(g[i]\) 表示 \(1 \sim i\) ...

  5. C语言-数组指针与指针数组

    1.思考 下面这些声明合法吗? int array[5]; int matrix[3][3]; int * pa = array; int * pm = matrix; 问题: array代表数组首元 ...

  6. [POI2007] OSI-Axes of Symmetry

    Description Luogu3454 BZOJ1100 Solution 把边和角顺次放入一个数组里,如果一个点为中心的回文串的半径大于\(n\),那就一定是一个对称轴.跑一遍manacher就 ...

  7. 普通平衡树 lg3369

    在多次学习splay后,我终于理解并码出了整份代码 参考了https://tiger0132.blog.luogu.org/slay-notes的博客 具体实现原理在上面这篇博客和百度中可以查到,接下 ...

  8. django 自定义url转换器

    django内置的url转换器,包括有int.str.uuid等等.但是有时候他们不能满足我们的需求,因此就需要使用自定义url转换器.自定义url转换器的五步:1.定义一个类,直接继承自object ...

  9. umi ui 构建时出现 spawn sh ENOENT 报错的解决方法

    在使用umi可视化界面构建项目的时候,如果出现spawn sh ENOENT错误,一般都是由于环境变量里没有设置git的环境变量导致的.在环境变量的path里加上"C:\Program Fi ...

  10. MYSQL之路之表