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 到 前一次拿的数量* ...
随机推荐
- pytorch之max()函数
pytorch之max()函数 待办 返回对应给定中最大值的索引,方便进行和target结果的索引进行比较 索引方式见下 https://blog.csdn.net/liuweiyuxiang/art ...
- SSIS 查找 组件
通过SSIS的“查找”组件进行不同数据源之间数据的合并操作 为了协助开发还原生产环境中的某些bug,需要将将生产环境的某些特定表数据导入到测试环境做测试,之前一直都是暴力地truncate测试环境的表 ...
- Jquery change方法
jQuery 事件 - change() 方法 当输入域发生变化时改变其颜色: $(".field").change(function(){ $(this).css("b ...
- 2019牛客多校第五场 G subsequence 1 dp+组合数学
subsequence 1 题意 给出两个数字串s,t,求s的子序列中在数值上大于t串的数量 分析 数字大于另一个数字,要么位数多,要么位数相同,字典序大,位数多可以很方便地用组合数学来解决,所以只剩 ...
- 利用Cadence PCB SI分析特性阻抗变化因素
1.概要 在进行PCB SI的设计时,理解特性阻抗是非常重要的.这次,我们对特性阻抗进行基础说明之外,还说明Allegro的阻抗计算原理以及各参数和阻抗的关系. 2.什么是特性阻抗? 2.1 传送线路 ...
- docker使用nginx实现ssl(https)反向代理其他容器应用
安装nginx容器 搜索nginx镜像 docker search nginx 拉取最新版nginx docker pull nginx:latest 运行容器 docker run --name=n ...
- mediasoup-demo解析-服务端
1.启动server npm start启动服务,会执行脚本: "start": "DEBUG=${DEBUG:='*mediasoup* *INFO* *WARN* * ...
- Java对象构成所有Java应用程序的基础
通过在优锐课的ange交流下,掌握了很多编程思想方法 特来分享 对象具有状态和行为 Java中的对象以及其他任何``面向对象''语言都是所有Java应用程序的基本组成部分,代表了你可能在你周围找到的任 ...
- mssql 数据库 基本知识
数据库中禁用/启用标识列的自增长 SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF } 恢复数据时要 ...
- js splice()
//arrayObject.splice(index,howmany,item1,.....,itemX) 语法 //测试代码let array;array = ['George','John','T ...