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分暴力倒是美滋兹

[NOI2016]循环之美

好心累啊,不想写题解,放个传送门

听说这是一道模板题

为什么你们家的模板题都这么难的呀

我怎么做模板题做一天呀

不知道是不是太久没做数学题了,半天连个柿子都列不出来

等到终于知道自己要干啥子了,然后看着k^x=1(mod j)很久很久

愣是没看出来gcd(k,j)==1

我是猪头吗(

然后开始推一个伪柿子

又推了很久

打出来调过了样例

试了几个小数据发现柿子萎了,得做成40*nlog,试图挣扎.无果

抄题解

发现完全忘了有可以从和前i个质因子互质dp转移这种事情

真是菜得抠脚

前几天一上午or一下午or一晚上做一道题,现在是一天做一道题,我怕不是要与太阳肩并肩

												

NOI2016的更多相关文章

  1. UOJ#219. 【NOI2016】优秀的拆分 [后缀数组 ST表]

    #219. [NOI2016]优秀的拆分 题意:求有多少AABB样子的子串,拆分不同的同一个子串算多个 一开始一直想直接求,并不方便 然后看了一眼Claris的题解的第一行就有思路了 如果分开,求\( ...

  2. 【BZOJ4650】【NOI2016】优秀的拆分(后缀数组)

    [BZOJ4650][NOI2016]优秀的拆分(后缀数组) 题面 BZOJ Uoj 题解 如果我们知道以某个位置为开始/结尾的\(AA\)串的个数 那就直接做一下乘法就好 这个怎么求? 枚举一个位置 ...

  3. 【BZOJ4653】【NOI2016】区间(线段树)

    [BZOJ4653][NOI2016]区间(线段树) 题面 BZOJ 题解 \(NOI\)良心送分题?? 既然是最大长度减去最小长度 莫名想到那道反复减边求最小生成树 从而求出最小的比值 所以这题的套 ...

  4. BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针

    BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...

  5. 「NOI2016」优秀的拆分 解题报告

    「NOI2016」优秀的拆分 这不是个SAM题,只是个LCP题目 95分的Hash很简单,枚举每个点为开头和末尾的AA串个数,然后乘一下之类的. 考虑怎么快速求"每个点为开头和末尾的AA串个 ...

  6. [NOI2016]优秀的拆分&&BZOJ2119股市的预测

    [NOI2016]优秀的拆分 https://www.lydsy.com/JudgeOnline/problem.php?id=4650 题解 如果我们能够统计出一个数组a,一个数组b,a[i]表示以 ...

  7. [Noi2016]区间[离散化+线段树维护+决策单调性]

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 621  Solved: 329[Submit][Status][D ...

  8. [NOI2016]区间 线段树

    [NOI2016]区间 LG传送门 考虑到这题的代价是最长边减最短边,可以先把边按长度排个序,双指针维护一个尺取的过程,如果存在包含某个点的区间数\(\ge m\),就更新答案并把左指针右移,这样做的 ...

  9. luogu1117 [NOI2016]优秀的拆分

    luogu1117 [NOI2016]优秀的拆分 https://www.luogu.org/problemnew/show/P1117 后缀数组我忘了. 此题哈希可解决95分(= =) 设\(l_i ...

  10. 【BZOJ4560】[NOI2016]优秀的拆分

    [BZOJ4560][NOI2016]优秀的拆分 题面 bzoj 洛谷 题解 考虑一个形如\(AABB\)的串是由两个形如\(AA\)的串拼起来的 那么我们设 \(f[i]\):以位置\(i\)为结尾 ...

随机推荐

  1. jq-demo-在列表中添加新节点,点击删除

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 七牛云-C#SDK-上传-简单上传

    请看系列C#-SDK-操作系列 https://i.cnblogs.com/posts?categoryid=1468598 接下来给大家分享的C#-SDK 简单上传 核心代码:有需要直接看这个,其实 ...

  3. 【JZOJ6419】模拟旅行&【BZOJ5506】【luoguP5304】旅行者

    description 某国有n座城市,这些城市之间通过m条单向道路相连,已知每条道路的长度. 不过,小X只对其中k座城市感兴趣. 为了更好地规划模拟旅行路线,提升模拟旅行的体验,小X想要知道他感兴趣 ...

  4. Perl 运算符

    Perl 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号,如: 3+2=5. Perl 语言内置了丰富的运算符,我们来看下常用的几种: 算术运算符 比较运算符 逻辑运算符 赋值运算符 位 ...

  5. Python 让文件代码支持汉字

    默认使用ASCII编码,改成utf8 #!/usr/bin/env python # -*- coding:utf8 -*- #coding:utf-8

  6. NX二次开发-UFUN输入表达式名称,获取它的名称和值UF_MODL_ask_exp

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建一个新的表达式,有TAG tag_t ...

  7. Rabbit MQ 客户端 API 开发

    项目开始 第一步首先需要引入对应的 jar 包 <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --> & ...

  8. js 事件驱动原理

    还记得当初学JAVA-GUI编程时学习过事件监听机制,此时再学习JavaScript中的事件驱动机制,不免简单.当初学习时也是画过原理图,所以从原理图开始吧! js是采用事件驱动(event-driv ...

  9. 前端开发者进阶之ECMAScript新特性--Object.create

    前端开发者进阶之ECMAScript新特性[一]--Object.create   Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指 ...

  10. SpringMVC(day1搭建SpringWebMvc项目)

    MVC和webMVC的区别 Model(模型) 数据模型,提供要展示的数据,因此包含数据和行为,行为是用来处理这些数据的.不过现在一般都分离开来:Value Object(数据) 和 服务层(行为). ...