National Contest for Private Universities (NCPU), 2019 C Boxes(双向链表)
题目中的要求如果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(双向链表)的更多相关文章
- 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/ ...
- 2015 Syrian Private Universities Collegiate Programming Contest 题解
题目在这里>_< 发现这场比赛在网上没有完整的题解,甚至连题目代码都没人贴出来(大概是因为题目太水了吧...).所以宝宝就来写个题解,也就当作成长记录了233333 A. Window 题 ...
- 2015 Syrian Private Universities Collegiate Programming Contest
A. Window B. Paper Game Des:给你一个矩形集合,一开始只有一个W*H的矩形.每次可以选一个矩形,切成两个并加入集合,长和宽必须是正整数.不能操作者输,求先手赢还是输.(1 ≤ ...
- The Preliminary Contest for ICPC Asia Nanjing 2019/2019南京网络赛——题解
(施工中……已更新DF) 比赛传送门:https://www.jisuanke.com/contest/3004 D. Robots(期望dp) 题意 给一个DAG,保证入度为$0$的点只有$1$,出 ...
- 计蒜客 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 ...
- 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 ...
- [The Preliminary Contest for ICPC Asia Nanjing 2019] A-The beautiful values of the palace(二维偏序+思维)
>传送门< 前言 这题比赛的时候觉得能做,硬是怼了一个半小时,最后还是放弃了.开始想到用二维前缀和,结果$n\leq 10^{6}$时间和空间上都爆了,没有办法.赛后看题解用树状数组,一看 ...
- 计蒜客 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 ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019
A:Who is better? 题目链接:https://nanti.jisuanke.com/t/41383 题意: 类似于有N个石子,先手第一次不能拿完,每次后手只能拿 1 到 前一次拿的数量* ...
随机推荐
- 记录 shell学习过程(5)continue break
1.continue ;i<;i++)) do ];then continue fi echo $i done # ./continue.sh12346789 2.break ;i<;i+ ...
- 【网站】i新媒上线了!
[New]i新媒上线了! i新媒,是新媒体人常用和必备的工具导航,我们整合了自媒体平台.行业资讯.运营营销.学习创业等常用的网站,让新媒体人更快地获取有用的知识. 访问链接:https://ixm.h ...
- 【Python】字符串切片
- SP1716 GSS3 - Can you answer these queries III - 动态dp,线段树
GSS3 Description 动态维护最大子段和,支持单点修改. Solution 设 \(f[i]\) 表示以 \(i\) 为结尾的最大子段和, \(g[i]\) 表示 \(1 \sim i\) ...
- C语言-数组指针与指针数组
1.思考 下面这些声明合法吗? int array[5]; int matrix[3][3]; int * pa = array; int * pm = matrix; 问题: array代表数组首元 ...
- [POI2007] OSI-Axes of Symmetry
Description Luogu3454 BZOJ1100 Solution 把边和角顺次放入一个数组里,如果一个点为中心的回文串的半径大于\(n\),那就一定是一个对称轴.跑一遍manacher就 ...
- 普通平衡树 lg3369
在多次学习splay后,我终于理解并码出了整份代码 参考了https://tiger0132.blog.luogu.org/slay-notes的博客 具体实现原理在上面这篇博客和百度中可以查到,接下 ...
- django 自定义url转换器
django内置的url转换器,包括有int.str.uuid等等.但是有时候他们不能满足我们的需求,因此就需要使用自定义url转换器.自定义url转换器的五步:1.定义一个类,直接继承自object ...
- umi ui 构建时出现 spawn sh ENOENT 报错的解决方法
在使用umi可视化界面构建项目的时候,如果出现spawn sh ENOENT错误,一般都是由于环境变量里没有设置git的环境变量导致的.在环境变量的path里加上"C:\Program Fi ...
- MYSQL之路之表