题解【洛谷P1645/CJOJ1244】序列
Description
有一个整数序列,它的每个数各不相同,我们不知道它的长度(即整数个数),但我们知道在某些区间中至少有多少个整数,用区间(Li,Ri,Ci)来描述,表示这个整数序列中至少有Ci个数来自区间[Li,Ri],给出若干个这样的区间,问这个整数序列的长度最少能为多少?
Input
第一行一个整数N,表示区间个数;
接下来N行每行三个整数(Li,Ri,Ci),描述一个区间。
Output
仅一个数,表示该整数序列的最小长度。
Sample Input
4
4 5 1
6 10 3
7 10 3
5 6 1
Sample Output
4
Hint
N≤1000,
0≤Li≤Ri≤1000 ,
1≤Ci≤Ri-Li+1
Solution
本题是贪心的题。
我们可以按右端点大小从小到大排序,如果当前区间已经满足要求,那么它其中的数的位置可以任意摆放。
又因为之后区间的右端点的值比当前区间右端点的值大,所以可以贪心地选择当前区间最右端的数,这样可以尽量满足后面区间的条件。
当然还能用差分做,我太菜了不会
Code
#include <bits/stdc++.h> using namespace std; inline int read()//快读
{
int f=,x=;
char c=getchar(); while(c<'' || c>'')
{
if(c=='-')f=-;
c=getchar();
} while(c>='' && c<='')
{
x=x*+c-'';
c=getchar();
} return f*x;
} struct Seq//定义结构体
{
int l,r,c;//分别为左端点、右端点和至少有几个数
} a[]; int n,ans,sum,s,cnt,p,v[]; inline int cmp(Seq x,Seq y)//排序所用的cmp函数
{
return x.r<y.r;
} int main()
{
n=read(); for(register int i=; i<=n; i++)
{
a[i].l=read(),a[i].r=read(),a[i].c=read();
} sort(a+,a++n,cmp);//排序 for(register int i=; i<=n; i++)//开始贪心
{
ans=; for(register int j=a[i].l; j<=a[i].r; j++)
{
if(v[j])//如果被访问过
{
++ans;//记录的数加1
}
} if(ans<a[i].c)//如果记录的数还比要求的数少
{
for(register int j=a[i].r; j>=a[i].l; j--)
{
if(!v[j])//如果没有被访问
{
++cnt,++ans,v[j]=;//答案加1,多记录1个数,并且标记为已访问 if(ans==a[i].c)//如果已经满足了要求
{
break;//退出
}
}
}
}
} printf("%d",cnt);//输出答案 return ;//结束
}
题解【洛谷P1645/CJOJ1244】序列的更多相关文章
- 【洛谷 P1645】 序列 (差分约束)
题目链接 差分约束. 设\(s[i]\)表示前\(i\)个位置有多少个数,那么对于一个限制条件\((L,R,C)\),显然有 \[s[R]-s[L-1]>=C\] 于是连一条\(L-1\)到\( ...
- 洛谷 P1628 合并序列
洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100 ...
- BZOJ 1500 洛谷2042维护序列题解
BZ链接 洛谷链接 这道题真是丧心病狂.... 应该很容易就可以看出做法,但是写代码写的....... 思路很简单,用一个平衡树维护一下所有的操作就好了,重点讲解一下代码的细节 首先如果按照常规写法的 ...
- 题解 洛谷 P3396 【哈希冲突】(根号分治)
根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...
- 洛谷 P5470 - [NOI2019] 序列(反悔贪心)
洛谷题面传送门 好几天没写题解了,写篇题解意思一下(大雾 考虑反悔贪心,首先我们考虑取出 \(a,b\) 序列中最大的 \(k\) 个数,但这样并不一定满足交集 \(\ge L\) 的限制,因此我们需 ...
- 题解 洛谷P5018【对称二叉树】(noip2018T4)
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...
- 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)
题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...
- 题解-洛谷P4229 某位歌姬的故事
题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...
- 题解-洛谷P4724 【模板】三维凸包
洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...
随机推荐
- 关于Comparable和Comparator那些事
在实际项目开发过程中,我们经常需要对某个对象或者某个集合中的元素进行排序,常用的两种方式是实现某个接口.常见的可以实现比较功能的接口有Comparable接口和 Comparator接口,那么这两个又 ...
- Mybatis常见面试题汇总
Mybatis常见面试题汇总 最近在复习整理Mybatis的相关知识,针对面试中的典型问题,结合相关书籍和网上相关帖子,做如下整理. ================================= ...
- P1339 热浪【最短路】
#include <bits/stdc++.h> #define dbg(x) cout << #x << "=" << x < ...
- kindle怎么导入电子书
参考网址:https://jingyan.baidu.com/article/59a015e342a165f795886545.html
- Redis基础详解
1. Redis是什么.特点.优势 Redis是一个开源的使用C语言编写.开源.支持网络.可基于内存亦可持久化的日志型.高性能的Key-Value数据库,并提供多种语言的API. 它通常被称为 数据结 ...
- codeforces 99999/553 Sultan's Pearls Solution 珍珠 题解
文章目录 珍珠 题意 分析 增加限定条件 去掉限定条件 Code 珍珠 题意 一共n课珍珠,m颗悬挂,其余在桌子上.如图所示. 仆人每天从某一端"借"一颗珍珠珠.主人每天都会检查悬 ...
- laravel封装返回json信息工具类
1.工具类可以一次写入多方多方调用,很大程度的节约开发时间得到想要的信息 这里演示一个json接口的工具类(文件定义在App\Http\Controllers\Tools)中 <?php /** ...
- app遮罩层--网赚
css .mask{display: none; position: fixed; width: 100%; height: 100%; top:0; background: rgba(0, 0, 0 ...
- SmtpStatusCode Enum
- yii2 钩子函数
插入时间 public function beforeSave($insert) { $this->created_at=time(); return parent::beforeSave($i ...