[数]补题ver.
上次补题好像把两次训练混在一起了,总之先按时间顺序补完这一次|ू・ω・` )
HDU-6301 不会的东西不能逃避.jpg
红小豆非常讨厌构造题,因为非常不会,并且非常逃避学习这类题,因为总也搞不清楚。
这次红小豆搞清楚了一道构造区间数字不重复数列的题。
首先,由于字典序最小,即每次可以直接提取可能值中最小值,且不重复,又可以插入删除,所以我们获得了set(噔噔噔)用ta来装可以填的数。接着,我们考虑大区间包着小区间的情况,显然大区间满足条件时小区间必然满足,所以我们这时可以把小区间视为大区间(合并)。然后,我们考虑互相分离的情况,这时应该把当前左端点到前一个左端点之间的数重新塞回set里,然后再抽一遍最小值。最后,我们考虑很麻烦的交叠情况,就是酱紫的:l1----l2---r1------r2,在l2---r1之间的数不能用在r1----r2中,而l1---l2之间的要塞回set,因此也是靠左端点的记录状态。
综上,我们需要知道每个位置对应的区间左端点,这个我们可以通过记录右端点的左端点,然后检查目前位置的后一个位置(倒着维护一遍必将有右端点),如果指向了更前面(位置编号更小)的地方,那就把目前位置的左端点更新为这个地方,不然的话就指着自己(这样没有被要求的地方就会不断把之前的数塞回set里,于是不断被填成1,得到最小字典序)。每个位置填数时,先将本次左端点和上次左端点之间的数塞回set,之后提取最小,最后从set里清除,输出。
乱码如下
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<set>
using namespace std;
int l, r;
int ans[];
int lh[];
int n, m, t; int main()
{
cin >> t;
while (t--) {
cin >> n >> m;
for (int i = ; i <= n; i++) {
ans[i] = ;
lh[i] = i;
}
for (int i = ; i <= m; i++) {
cin >> l>> r;
if (lh[r] > l)lh[r] = l;
}
for (int i = n - ; i >= ; i--)
if (lh[i + ] < lh[i])lh[i] = lh[i + ];
set<int>p;
for (int i = ; i <= n; i++)p.insert(i);
for (int i = ; i <= n; i++) {
for (int j = lh[i - ]; j < lh[i]; j++) p.insert(ans[j]);
ans[i] = *p.begin();
p.erase(p.begin());
if (i == )cout << ans[i];
else if (i == n)cout << " " << ans[n] << endl;
else cout << " " << ans[i];
} }
return ;
}
HDU-6301
我看到的题解里用pair来存要求区间,可是后面并没有再用到这个区间,所以就直接用l和r吧。定义在循环里的set就可以每次都清空了(比如某次搜索wa到爆炸是因为队列定义在了外面嘤)。第一个循环不从0开始的话(因为我后面从1开始)就会有很多零被填到数列里。。。
HDU-6300 有些东西总是要学会的,脑子有坑是为了增大皮层面积
发现一道水题,反而补的时候wa了两次,然后改了排序cmp学会了bool operator(一直固执地手写cmp),最后发现是输出错误(逐渐KAI化)。我是三个三个跳着输出的,i最后还是会到3*n,想着输出n次就定了小于n嘤
给的是n,输入点输出点都是3*n,完。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node {
int x, y, num;
bool operator < (const node&a) const{
if (a.x == x)return y < a.y;
return x < a.x;
}
}p[]; int main()
{
int t, n;
cin >> t;
while (t--) {
cin >> n;
for (int i = ; i < * n; i++) {
cin >> p[i].x >> p[i].y;
p[i].num = i + ;
}
sort(p, p + * n);
for (int i = ; i < *n; i += )
cout << p[i].num << " " << p[i + ].num << " " << p[i + ].num << endl;
}
return ;
}
HDU-6300
这次还有一个板子好长的空间几何,还有一个想专门整理一篇的反演|ू・ω・` )
emmm反正我今天不想写了,白天武大onsite很是自闭(但是一起打比赛又很开心),很困又充满迷茫的烦躁。机会留给有准备的人,可是如果每个溜过身边的机会都不想丢失,就要在疲惫之外努力承受总是差一点点的命运扼喉感。毕竟,果断就会白给,太菜才是原罪(支离破碎的发言)
[数]补题ver.的更多相关文章
- The Preliminary Contest for ICPC Asia Xuzhou 2019 【 题目:so easy】{并查集维护一个数的下一个没有被删掉的数} 补题ING
题意:给[1,n],n个数,有两种操作: 1 x,删去x2 x,查询还未被删去的数中大于等于x的最小的数是多少. input: output: 做法:按照并查集的方法压缩路径 代码: #include ...
- [数]数学系列预习->补水题ver.
---恢复内容开始--- 话说要学反演了,contest一题都搞不定,整理题目暂且搁置,数学笨蛋来学一下数学_(:з」∠)_ ---恢复内容结束--- 是的,预习看了半天教学,没有整理,做题又都不会, ...
- 2017河工大校赛补题CGH and 赛后小结
网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 4.30-5.1cf补题
//yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...
- 2018 CCPC 桂林站(upc复现赛)补题
2018 CCPC 桂林站(upc复现赛)补题 G.Greatest Common Divisor(思维) 求相邻数的差值的gcd,对gcd分解素因子,对所有的素因子做一次遍历,找出最小答案. 几个样 ...
- Codeforces VP/补题小记 (持续填坑)
Codeforces VP/补题小记 1149 C. Tree Generator 给你一棵树的括号序列,每次交换两个括号,维护每次交换之后的直径. 考虑括号序列维护树的路径信息和,是将左括号看做 ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
随机推荐
- centos7救援模式--误删/usr/bin/恢复
模拟场景 centos7 误删/usr/bin/等系统内置文件夹, 导致几百个内置命令丢失. 修复 rescue模式 vm模拟一遍(如果在物理机, 可通过U盘方式直接开机U盘进入选择救援模式, 方式通 ...
- VMware下liunx虚拟机仅主机模式上网
VMware上的配置 虚拟网络编辑器上的仅主机模式设置 可以自定义虚拟机的网段,我设置的是192.168.137.0 选择对应网卡的联网方式为仅主机模式 配置虚拟机网卡,主要是按虚拟网卡编辑器中设置的 ...
- docker和kubernetes中hostname的使用和常见问题
hostname在docker中是使用UTS namespace进行隔离的.docker中主要有两种ns的用法, 一种是docker run --uts="" busybox.这种 ...
- VS2010下安装boost库
在我们的C++项目中安装boost库,下面以VS2010版本作为例子,其它版本的设置也差不多. 一.编译生成boost库 1.下载最新的boost(本人下载的是boost_1_56_0).boost官 ...
- mongodb在ubuntu下无法打开的问题
通过查询大概知道了是非正常关闭,mongod.lock的事,ubuntu的mongod.lock在/var/lib/mongodb中,删除之后即可重新打开.
- java知识点集锦--基础知识部分
1.面向对象特征:封装.继承.多态 封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口来访问.面向对象的本质就是将现实世界描绘成一系列完全自治.封闭的对象.我们在类中编写的方法就是 ...
- Laravel Not Found Exceptions 取数据的一个小技巧
从 model 中取数据的时候, 用下面的方法, 而不是简单的 find(1), 或 first(), 这样如果刚好要查询的数据没有, 就会返回比较友好的 404 页面: $model = App\F ...
- go日常问题记录
1.log.Fatalln()是会强制结束进程.不要用Fatal或Panic开头的 panic是go语言一种错误处理,类似于throw,如果没人catch它,程序就会挂掉,go语言的catch是rec ...
- springboot(一)
@Configuration:声明当前类是一个配置类==等同于 spring的xml文件,如果使用了改注解意味着该类里可能有0个或者多个@bean注解,此处没有使用包扫描,是因为所有的@bean 都在 ...
- LeetCode--034--在排序数组中查找元素的第一个和最后一个位置(java)
给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...