NOI2016
luoguP1712 [NOI2016]区间
这是一道送分题.
对于我这种每天抄题解不动脑子思维僵化得厉害的智障选手就是送命题.
一直在想端点排序各种Treap搞...
正解:
已知一些区间,如何判断是否满足条件?满足条件是有一个点被覆盖的次数大于m,那么用线段树可以解决这个问题.
把区间按长度排序,从小往大考虑答案中选中最长区间的最大值.加入一个新的区间,线段树上区间加,当最大值仍大于m时,按加入时间删去最早的区间即可.
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define inf 0x7fffffff
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,ls[N],sz,ans; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct node {
int l,r,ll,rr;
friend bool operator <(const node&A,const node&B) {
return A.r-A.l<B.r-B.l;
}
}p[N]; #define lc x<<1
#define rc ((x<<1)|1)
#define mid ((l+r)>>1)
int sg[N<<],lz[N<<];
void down(int x,int l_len,int r_len) {
if(!lz[x]) return;
if(l_len) sg[lc]+=lz[x],lz[lc]+=lz[x];
if(r_len) sg[rc]+=lz[x],lz[rc]+=lz[x];
lz[x]=;
} void update(int x,int l,int r,int ql,int qr,int v) {
if(l>=ql&&r<=qr) {
sg[x]+=v; lz[x]+=v; return;
}
down(x,mid-l+,r-mid);
if(ql<=mid) update(lc,l,mid,ql,qr,v);
if(qr>mid) update(rc,mid+,r,ql,qr,v);
sg[x]=max(sg[lc],sg[rc]);
} //#define DEBUG
int main() {
#ifdef DEBUG
freopen("1.in","r",stdin);
//freopen(".out","w",stdout);
#endif
read(n); read(m);
For(i,,n) {
read(p[i].l); read(p[i].r);
ls[++ls[]]=p[i].l; ls[++ls[]]=p[i].r;
}
sort(ls+,ls+ls[]+);
sz=unique(ls+,ls+ls[]+)-(ls+);
sort(p+,p+n+);
ans=inf; int pos=;
For(i,,n) {
p[i].ll=lower_bound(ls+,ls+sz+,p[i].l)-ls;
p[i].rr=lower_bound(ls+,ls+sz+,p[i].r)-ls;
update(,,sz,p[i].ll,p[i].rr,);
while(sg[]>=m) {
ans=min(ans,(p[i].r-p[i].l)-(p[pos].r-p[pos].l));
update(,,sz,p[pos].ll,p[pos].rr,-); pos++;
}
}
if(ans==inf) ans=-;
printf("%d\n",ans);
return ;
}
luoguP1173 [NOI2016]网格
对于细节苦手考虑问题永远没法全面连Noipdtt2傻逼模拟题都写挂的智障选手又是一道送命题.
一开始以为大力特判一波就可以,发现很多情况没考虑到.
要离散求割点.
答案显然只有 -1,0,1,2
若跳蚤个数小于等于2且联通则为-1
图不联通则为0
否则有割点则为1
否则为2
关键就是离散求割点.
我是把每个蛐蛐周围一圈24个跳蚤拿下来,再把他们对应的上下左右贴着边界的跳蚤拿出来建图,然后跑tarjan
没有看懂只用24个跳蚤和只用8个跳蚤再往外一圈的题解
我直接跑tarjan的话,如果只拿8个跳蚤或者不拿最外面一圈,可以卡掉的数据:
4 1 1
1 1
还有注意特判n,m乘积的时候要开LL.......
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define inf 0x7fffffff
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,ls[N],sz,ans; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct node {
int l,r,ll,rr;
friend bool operator <(const node&A,const node&B) {
return A.r-A.l<B.r-B.l;
}
}p[N]; #define lc x<<1
#define rc ((x<<1)|1)
#define mid ((l+r)>>1)
int sg[N<<],lz[N<<];
void down(int x,int l_len,int r_len) {
if(!lz[x]) return;
if(l_len) sg[lc]+=lz[x],lz[lc]+=lz[x];
if(r_len) sg[rc]+=lz[x],lz[rc]+=lz[x];
lz[x]=;
} void update(int x,int l,int r,int ql,int qr,int v) {
if(l>=ql&&r<=qr) {
sg[x]+=v; lz[x]+=v; return;
}
down(x,mid-l+,r-mid);
if(ql<=mid) update(lc,l,mid,ql,qr,v);
if(qr>mid) update(rc,mid+,r,ql,qr,v);
sg[x]=max(sg[lc],sg[rc]);
} //#define DEBUG
int main() {
#ifdef DEBUG
freopen("1.in","r",stdin);
//freopen(".out","w",stdout);
#endif
read(n); read(m);
For(i,,n) {
read(p[i].l); read(p[i].r);
ls[++ls[]]=p[i].l; ls[++ls[]]=p[i].r;
}
sort(ls+,ls+ls[]+);
sz=unique(ls+,ls+ls[]+)-(ls+);
sort(p+,p+n+);
ans=inf; int pos=;
For(i,,n) {
p[i].ll=lower_bound(ls+,ls+sz+,p[i].l)-ls;
p[i].rr=lower_bound(ls+,ls+sz+,p[i].r)-ls;
update(,,sz,p[i].ll,p[i].rr,);
while(sg[]>=m) {
ans=min(ans,(p[i].r-p[i].l)-(p[pos].r-p[pos].l));
update(,,sz,p[pos].ll,p[pos].rr,-); pos++;
}
}
if(ans==inf) ans=-;
printf("%d\n",ans);
return ;
}
[NOI2016]国王饮水记
真 送命题
感觉70分可以连蒙带猜瞎那啥伪证一波,话说回来我也不会用高精小数库呀
我就靠llj和sxy了
[NOI2016]优秀的拆分
听说是送分题
当时的我没做出来
感觉现在的我不知道题解仍然做不来
不过95分暴力倒是美滋兹
好心累啊,不想写题解,放个传送门
听说这是一道模板题
为什么你们家的模板题都这么难的呀
我怎么做模板题做一天呀
不知道是不是太久没做数学题了,半天连个柿子都列不出来
等到终于知道自己要干啥子了,然后看着k^x=1(mod j)很久很久
愣是没看出来gcd(k,j)==1
我是猪头吗(
然后开始推一个伪柿子
又推了很久
打出来调过了样例
试了几个小数据发现柿子萎了,得做成40*nlog,试图挣扎.无果
抄题解
发现完全忘了有可以从和前i个质因子互质dp转移这种事情
真是菜得抠脚
前几天一上午or一下午or一晚上做一道题,现在是一天做一道题,我怕不是要与太阳肩并肩
NOI2016的更多相关文章
- UOJ#219. 【NOI2016】优秀的拆分 [后缀数组 ST表]
#219. [NOI2016]优秀的拆分 题意:求有多少AABB样子的子串,拆分不同的同一个子串算多个 一开始一直想直接求,并不方便 然后看了一眼Claris的题解的第一行就有思路了 如果分开,求\( ...
- 【BZOJ4650】【NOI2016】优秀的拆分(后缀数组)
[BZOJ4650][NOI2016]优秀的拆分(后缀数组) 题面 BZOJ Uoj 题解 如果我们知道以某个位置为开始/结尾的\(AA\)串的个数 那就直接做一下乘法就好 这个怎么求? 枚举一个位置 ...
- 【BZOJ4653】【NOI2016】区间(线段树)
[BZOJ4653][NOI2016]区间(线段树) 题面 BZOJ 题解 \(NOI\)良心送分题?? 既然是最大长度减去最小长度 莫名想到那道反复减边求最小生成树 从而求出最小的比值 所以这题的套 ...
- BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针
BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...
- 「NOI2016」优秀的拆分 解题报告
「NOI2016」优秀的拆分 这不是个SAM题,只是个LCP题目 95分的Hash很简单,枚举每个点为开头和末尾的AA串个数,然后乘一下之类的. 考虑怎么快速求"每个点为开头和末尾的AA串个 ...
- [NOI2016]优秀的拆分&&BZOJ2119股市的预测
[NOI2016]优秀的拆分 https://www.lydsy.com/JudgeOnline/problem.php?id=4650 题解 如果我们能够统计出一个数组a,一个数组b,a[i]表示以 ...
- [Noi2016]区间[离散化+线段树维护+决策单调性]
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 621 Solved: 329[Submit][Status][D ...
- [NOI2016]区间 线段树
[NOI2016]区间 LG传送门 考虑到这题的代价是最长边减最短边,可以先把边按长度排个序,双指针维护一个尺取的过程,如果存在包含某个点的区间数\(\ge m\),就更新答案并把左指针右移,这样做的 ...
- luogu1117 [NOI2016]优秀的拆分
luogu1117 [NOI2016]优秀的拆分 https://www.luogu.org/problemnew/show/P1117 后缀数组我忘了. 此题哈希可解决95分(= =) 设\(l_i ...
- 【BZOJ4560】[NOI2016]优秀的拆分
[BZOJ4560][NOI2016]优秀的拆分 题面 bzoj 洛谷 题解 考虑一个形如\(AABB\)的串是由两个形如\(AA\)的串拼起来的 那么我们设 \(f[i]\):以位置\(i\)为结尾 ...
随机推荐
- Linux下Qt调用共享库文件.so
修改已有的pro文件,添加如下几句: INCLUDEPATH += /home/ubuntu/camera/camera/LIBS += -L/home/ubuntu/camera/camera -l ...
- python_django_template_url反向解析
什么是url反向解析? 一般我们网址在diango内部匹配顺序为:网址→ url → views → templates → <a href="suck/good/"> ...
- nodejs mysql 连接数据库
1.设计数据库 2.设计数据库表 3.下载MySQL模块 npm install --save mysql 4.编写代码 const mysql=require('mysql'); //1.连接 // ...
- vue 学习 cli3常用配置
---恢复内容开始--- cli3以后,构建的项目更加的简洁,配置文件也没有向cli2那样暴漏出来,但这并不代表cli3是不可配置的,我们只需要在根目录下添加一个vue.config.js作为项目的配 ...
- leetcood学习笔记-111-二叉树的最小深度
题目描述: 第一次提交: class Solution(object): def minDepth(self, root): """ :type root: TreeNo ...
- Bootstrap快速入门并且建立常用模板
对于移动端,能够快速搭建网站,操作相对简单 ,更容易掌握,这篇文章就介绍一下BootStrap 一 什么是Bottstrap 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受 ...
- HTML5表格(table)篇
初学HTML接触table少不了,但是实际应用的地方也有. 简单说明HTML <table> 标签 定义和用法 <table> 标签定义 HTML 表格. 简单的 HTML 表 ...
- DELPHI读取网页源文件和获取字符串
说到网页采集,通常大家以为到网上偷数据,然后把到收集到的数据挂到自己网上去.其实也可以将采集到的数据做为公司的参考,或把收集的数据跟自己公司的业务做对比等.目前网页采集多为3P代码为多(3P即ASP. ...
- hadoop的基准测试
hadoop的基准测试 实际生产环境当中,hadoop的环境搭建完成之后,第一件事情就是进行压力测试,测试我们的集群的读取和写入速度,测试我们的网络带宽是否足够等一些基准测试 测试写入速度 向HDFS ...
- PMP-49个过程快速导览
启动过程组 名正言顺 人鬼佛神 01 -4.1制定项目章程 -授权PM,启动项目 ● 编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程 ● 明确项目与组织战略目标之间的联系,确立 ...