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 到 前一次拿的数量* ...
随机推荐
- Codeforces Round #600 (Div. 2) C - Sweets Eating
#include<iostream> #include<algorithm> #include<cstring> using namespace std ; typ ...
- centos7修改xshell默认访问端口由22修改为62058
1.vim /etc/ssh/sshd_config 2.新加端口62058:Port 62058 3.重启sshd服务:systemctl restart sshd 4.将新加端口添加到防火墙并重启 ...
- [HNOI2013] 游走 - 概率期望,高斯消元,贪心
假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对 ...
- adb 连接手机
adb kill-server adb start-server 可能会遇到问题华为手机: 有应用遮挡了权限请求界面,设置应用无法验证你的回应 系统导航关闭悬浮球 然后重启adb server ad ...
- APP开发工具如何选?
随着技术的发展,在当前开发一款APP已经非常的简单和快速.特别是近些年,利用HTML5技术将APP的开发门槛进一步降低.各种开发工具和框架层出不穷,令人眼花缭乱.这么多的工具摆在眼前应该如何进行选择呢 ...
- char nchar varchar nvarchar varchar2区别
char(n):长度不可变,长度为n个字节,非Unicode字符 nchar(n):长度不可变,长度为2n个字节,Unicode字符 varchar(n):长度可变,长度为n个字节,非Unicode字 ...
- mysql-sql逻辑查询顺序
1.sql逻辑执行顺序(物理执行顺序可能会因索引而不同) SELECT 7 DISTINCT 8 FROM 1 JOIN 2 ON 3 WHERE 4 GROUP BY 5 ...
- STM32F103之ADC学习记录
1.问题 1)10位ADC的误差是多少? 首先要分清分辨率与精度的区别. 10cm的尺子,有100个等分刻度,则该尺子的分辨率为1mm. 但不能说这把尺子的精度是1mm. 在冬天,尺子会热胀冷缩,依然 ...
- es 6.x scroll用法
我们可以使用from +size来获取所有数据,但是,如果数据量大的时候,这样的操作开销很大,这时候可以使用scroll操作 1.第一步发起一个scroll 的post请求,带上参数scroll=1m ...
- Flink流处理(五)- 状态与一致性模型
状态(State)与一致性模型 接下来我们转向另一个在流处理中十分重要的点:状态(state).状态在数据处理中是无处不在的.为了产生一个结果,函数一般会聚合某个时间段内(或是一定数量的)events ...