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 到 前一次拿的数量* ...
随机推荐
- Andre Weil的一生
在20世纪的数学家中,Andre Weil(1906-1998)以其渊博的学识.坎坷的经历和超凡的人格魅力成为引人注目的一员. 他无疑是20世纪最伟大的数学家之一.国际数学家大会把数学划分为19个大的 ...
- 【Python】字符串处理方法
- [Luogu]三步必杀
Description Luogu4231 Solution 我最近到底怎么了,这种题都做不出来了,一看题第一反应李超线段树(虽然不会),觉得不可做,看一眼题解才发现这个题可以差分,然后差分还打错了好 ...
- python 百万级别类实例实现节省内存
# 案例: ''' 某网络游戏中,定义了玩家类Player(id,name,status) 每当有一个玩家,就会在服务器创建一个Player实例 当在线人数过多时,将产生大量实例(百万级别),消耗内存 ...
- 【蓝桥杯/算法训练】Sticks 剪枝算法
剪枝算法 大概理解是通过分析问题,发现一些判断条件,避免不必要的搜索.通常应用在DFS 和 BFS 搜索算法中:剪枝策略就是寻找过滤条件,提前减少不必要的搜索路径. 问题描述 George took ...
- HTML列表标签
<ul>无序列表 有2个属性 1.compact 属性: 规定列表呈现的效果比正常情况更小巧.没啥作用 2.type 属性 disc小圆点 square小方块 circle小圆圈(默认) ...
- Having用法以及其和Where区别
例如,进行分组语句: select year,count(id) num from tblPlantProduce group by year 在这条语句中若要筛选出年份>2005年的有两种方式 ...
- istio部署-istio jaeger & kiali
参考 fleeto/sleep fleeto/flaskapp jaegertracing/jaeger kiali kiali/kiali kiali/kiali-ui kiali/kiali/ta ...
- rancher版本问题引发的节点注册失败失败
rancher版本问题引发的节点注册失败失败 待办 https://www.cnblogs.com/Me1onRind/p/11147639.html
- oracle查询第几行到第几行的数据
我想查询10条到20条的数据 注意: 1.大数在前,小数在后面 2.都是小于 () minus (); 运行结果: