CSUOJ1329——一行盒子_湖南省第九届大学生计算机程序设计竞赛
题目是中文的我就不是说明了,比赛的时候看过题目后队友说是splay来做,细想来省赛不会出这么坑的题目吧。
于是比赛还有一个小时左右把该做的都做完了以后,我们队三个人都来思考这个题目了。不过还好很快我们就跳过了这个splay的坑。
因为这个题目根本不是spaly,直接用数组模拟链表就行了,所有的操作都可以再O(1)的时间复杂度以内搞定。
可以这样做,首先对于每一个数,我们都可以视为一个节点,然后一条链的话就相当于是指针操作了,每个节点都设置两个指针——前驱和后继。
设置后继节点是为了应对4操作,因为全部取反只要交换后继和前驱就可以了(其实不用交换也行,只要记录总共要交换多少次就行了,因为换两次就换回来了哦)
对于1、2、3就是简单的链表操作了,不过注意3操作有一个坑,就是x和y可能是相邻的两个节点哦,特别注意了,这里有点坑的。
不过说了,上代码,这个题目时间虽然是O(n),但是时间还不算宽哦,所以写的时候还是注意一下比较好。
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 1001000
#define ll long long
using namespace std; int next[maxn],pre[maxn],n,m,k,tim;
int *tep,*tep2; void init_next_pre()
{
for (int i=; i<=n; i++) next[i]=i+,pre[i]=i-;
next[n]=;
} void dele(int x)
{
int k1=pre[x],k2=next[x];
next[k1]=k2,pre[k2]=k1;
} void insert(int k1,int mid,int k2)
{
next[k1]=mid,next[mid]=k2;
pre[k2]=mid,pre[mid]=k1;
} void SWAP(int x,int y)
{
int k1=pre[x],k2=next[x],k3=pre[y],k4=next[y];
if (k2==y)//考虑xy相邻的情况
{
next[k1]=y,next[y]=x,next[x]=k4;
pre[k4]=x,pre[x]=y,pre[y]=k1;
}
else if (k4==x)//考虑xy相邻的情况
{
next[k3]=x,next[x]=y,next[y]=k2;
pre[k2]=y,pre[y]=x,pre[x]=k3;
}
else
{
next[k1]=y,next[y]=k2,pre[y]=k1,pre[k2]=y;
next[k3]=x,next[x]=k4,pre[x]=k3,pre[k4]=x;
}
} int main()
{
int cod,x,y,cas=;
while (cin>>n>>m)
{
tim=;
init_next_pre();
while (m--)
{
cin>>cod;
if (cod==) tim++;//这里只要记录首位交换了多少次哦
else
{
cin>>x>>y;
if (cod< && tim&) cod=-cod;//如果交换了奇数次,那么本来应该插在前面就相当于是现在应该插在后面,T_T不好怎么表达,自己理解一下就懂了。
if (cod==)
{
dele(x);
k=pre[y];
insert(k,x,y);
}
else if (cod==)
{
dele(x);
k=next[y];
insert(y,x,k);
}
else if (cod==) SWAP(x,y);
}
}
if (tim&) tep=pre,tep2=next; else tep=next,tep2=pre;
for (int i=; i<=n; i++)
{
if (tep2[i]==)
{
ll ans=;
for (int k=; i; i=tep[i],k++) if (k&) ans+=i;
cout<<"Case "<<++cas<<": "<<ans<<endl;
break;
}
}
}
return ;
}
CSUOJ1329——一行盒子_湖南省第九届大学生计算机程序设计竞赛的更多相关文章
- 湖南省第九届大学生计算机程序设计竞赛 Interesting Calculator
Interesting Calculator Time Limit: 2 Sec Memory Limit: 128 MB Submit: 163 Solved: 49 Description T ...
- 湖南省第十三届大学生计算机程序设计竞赛 Football Training Camp 贪心
2007: Football Training Camp[原创-转载请说明] Submit Page Summary Time Limit: 1 Sec Memory Limit: 1 ...
- 2018湖南省第14届大学生计算机程序设计竞赛 D: 卖萌表情
Description 已知以下 4 种都是卖萌表情(空白的部分可以是任意字符.竖线是便于展示的分隔符,没有实际意义): ^ ^ | ^ | < | > v | v v | > | ...
- 2018湖南省第14届大学生计算机程序设计竞赛 C: 时间旅行
Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中. 当 Bobo 位于时间轴上 t 点,同时时间机器有 c 单位燃料时,他可以选择一个 ...
- 2018湖南省第14届大学生计算机程序设计竞赛 A字符画
Description 读入 w,请输出 2018 的字符画,两个数字之间有 w 个空格.具体格式请参考样例输出. 1 ≤ w ≤ 2018 Input 输入文件只包含 1 个整数 w. Output ...
- 希尔加密算法(湖南师范大学第六届大学生计算机程序设计竞赛)hnuoj11552
解密 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 2, Accept ...
- csu 1503: 点弧之间的距离-湖南省第十届大学生计算机程序设计大赛
这是--比量p并用交点连接中心不上弧.在于:它至p距离.是不是p与端点之间的最短距离 #include<iostream> #include<map> #include< ...
- 2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解
2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解 update10.01 突然发现叉姐把这场的题传到牛客上了,现在大家可以有地方提交了呢. 不知道该干什么所以就来水一篇题解 ...
- 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)
原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...
随机推荐
- 20155307 《Java程序设计》课堂实践项目数据库
老师我上课没有在规定时间内完成,这是我补交的截图
- vue 与原生app的对接交互(混合开发)
小伙伴们在用vue开发h5项目特别是移动端的项目,很多都是打包后挂载在原生APP上的,那就少不了与原生交互了,我最近就是在坐这个,踩了一些坑,拿出来给大家分享下. 0.通过url传输数据:(一般是在入 ...
- 记录使用jQuery和Python抓取采集数据的一个实例
从现成的网站上抓取汽车品牌,型号,车系的数据库记录. 先看成果,大概4w条车款记录 一共建了四张表,分别存储品牌,车系,车型和车款 大概过程: 使用jQuery获取页面中呈现的大批内容 能通过页面一次 ...
- 「Leetcode」976. Largest Perimeter Triangle(C++)
分析 好久不刷题真的思维僵化,要考虑到这样一个结论:如果递增的三个数\(x_i,x_{i+1},x_{i+2}\)不符合题意,那么最大的两边之差一定大于等于第一条边,那么任何比第一条边小的都不能成立. ...
- 模拟IDE上的run过程
看了一下老陈写的模仿JDK动态代理,从中取一部分单独扩展,模拟一下IDE上的run过程(不愧是老陈,去年写的东西我要现在才能理解) 对run过程的猜想 在点击run的过程中应该做了不少事.先编译运行r ...
- ECharts之force力导向布局图——数据源说明及后端API约定
Echarts ? 关于 Echarts 请移步这里 force 力导向图 实现方式,如: function require_EC () { require( [ 'echarts', //载入for ...
- Scrum立会报告+燃尽图(十一月二十三日总第三十一次):界面修改及新页面添加
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2410 项目地址:https://git.coding.net/zhang ...
- Scrum立会报告+燃尽图(Beta阶段第二周第一次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2409 项目地址:https://coding.net/u/wuyy694 ...
- 20181120-6 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 03
此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411] 版本控制地址 [https://git.coding.n ...
- 20181113-7 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 05
作业要求https://edu.cnblogs.com/campus/nenu/2018fall/homework/2387 版本控制https://git.coding.net/lglr2018/F ...