BZOJ.5397.circular(随机化 贪心)
感觉自己完全没做过环上选线段的问题(除了一个2-SAT),所以来具体写一写qwq。
基本完全抄自remoon的题解qwq...
(下标从\(0\sim m-1\))
拆环为链,对于原线段\([l,r]\),若\(l\leq r\)就拆成两个线段\([l,r],[l+m-1,r+m-1]\),否则拆成一个线段\([l,r+m-1]\)。(这样枚举的时候限制所选线段在一个\(m\)区间内就行了)
考虑暴力。直接枚举是否一定选某个线段\(i\),然后贪心选其它的即可(限制所选线段在\([l_i,l_i+m-1]\)内)。复杂度\(O(n^2)\)或\(O(n^2\log n)\)。
假设最优答案是\(x\)。若\(x\leq\sqrt n\),那么每次最多会选\(x\)次。
若\(x\gt\sqrt n\),那么每次随机一个线段都会有\(\frac xn\)的概率选中最优解。所以我们随机\(\frac nx+\)次可能就差不多了。
但是我们也不知道\(x\),写第一种好像也很麻烦。那就用第二个随机的那种做法好了。
设随机的次数是\(k\),那么复杂度是\(O(kn)\)的。
往大了取好了。事实上取\(k=2\)就可以过这道题惹=v=。
虽然其实正确性并没有保证=v=...
//3656kb	280ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define Rand() (rand()<<16|rand())
#define gc() getchar()
#define MAXIN 500000
//#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e5+5;
int L[N],R[N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Node
{
	int l,r;
	bool operator <(const Node &x)const
	{
		return r<x.r;
	}
}A[N<<1];
inline int read()
{
	int now=0;register char c=gc();
	for(;!isdigit(c);c=gc());
	for(;isdigit(c);now=now*10+c-48,c=gc());
	return now;
}
int Calc(int x,int n,int m,int tot)
{
	int ans=0;
	for(int i=1,now=0,l=L[x],r=l+m; i<=tot; ++i)
		if(A[i].l>=l && A[i].r<=r && A[i].l>=now)
			now=A[i].r, ++ans;
	return ans;
}
int main()
{
	srand(1002330);
	const int m=read()-1,n=read(); int tot=0;
	for(int i=1; i<=n; ++i)
	{
		int l=L[i]=read(),r=R[i]=read();//我刚开始竟然没读L[i] WA n次=-=
		if(l<=r) A[++tot]=(Node){l,r}, A[++tot]=(Node){l+m,r+m};
		else A[++tot]=(Node){l,r+m};
	}
	std::sort(A+1,A+1+tot);
	int ans=0;
//	for(int k=2,i=1; i<=n; i+=n/k) ans=std::max(ans,Calc(i,n,m,tot));//也可过...
	for(int k=100; k--; ) ans=std::max(ans,Calc(Rand()%n+1,n,m,tot));
	printf("%d\n",ans);
	return 0;
}
BZOJ.5397.circular(随机化 贪心)的更多相关文章
- BZOJ.2428.[HAOI2006]均分数据(随机化贪心/模拟退火)
		题目链接 模拟退火: 模拟退火!每次随机一个位置加给sum[]最小的组. 参数真特么玄学啊..气的不想调了(其实就是想刷刷最优解) 如果用DP去算好像更准.. //832kb 428ms #inclu ... 
- 2018.08.29 NOIP模拟 movie(状压dp/随机化贪心)
		[描述] 小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播 放.他希望连续看 L 分钟的电影.因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他 ... 
- 2018.08.09洛谷P3959 宝藏(随机化贪心)
		传送门 回想起了自己赛场上乱搜的20分. 好吧现在也就是写了一个随机化贪心就水过去了,不得不说随机化贪心大法好. 代码: #include<bits/stdc++.h> using nam ... 
- 洛谷 P2503 [HAOI2006]均分数据 随机化贪心
		洛谷P2503 [HAOI2006]均分数据(随机化贪心) 现在来看这个题就是水题,但模拟赛时想了1个小时贪心,推了一堆结论,最后发现贪心做 不了, 又想了半个小时dp 发现dp好像也做不了,在随机化 ... 
- BZOJ 1029 建筑抢修  贪心+堆
		又搞了一晚上OI,编了两道BZOJ和几道NOI题库,临走之前写两篇感想 noip越来越近了,韩大和clove爷已经开始停课虐我们了... 1029: [JSOI2007]建筑抢修 Time Limit ... 
- [bzoj 2151]种树(贪心)
		题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 分析:原型是bzoj 1150(CTSC 2007) 首先DP无法下手,想到贪心.想到贪 ... 
- bzoj5397 circular 随机化(
		题目大意 给定一个环,环上有一些线段,试选出最多的线段 题解: 提醒:这可能是一篇非常欢乐的题解 我们考虑倍长环,然后断环为链 我们考虑枚举开头的线段,然后做一次贪心 这样子的复杂度根据实现的不同是\ ... 
- bzoj 5185 Lifeguards - 动态规划 - 贪心
		题目传送门 传送点I 传送点II 题目大意 给定$n$个区间,问恰好删去其中$k$个,剩下的区间的并的最大总长度. 显然被包含的区间一定不优.再加上被包含的区间对计数不友好.直接把它删掉. 注意到题目 ... 
- POJ3301 Texas Trip 计算几何、随机化贪心
		传送门--Vjudge 三分写法似乎有问题,可以去Udebug上看Morass的\(666\)个测试点的数据,我的乱搞有很多比正解答案小,但还是能在SPOJ和POJ过,可见数据之水. 可以对正方形的角 ... 
随机推荐
- 实验一 Java环境的搭建&Eclipse的安装
			本次实验为在自己电脑上搭建Java环境,熟悉Java的编译和运行环境并安装Eclipse 一.JAVA环境的搭建 1.从Oracle网站上下载Java的jdk [https://www.oracle. ... 
- Tree POJ - 1741【树分治】【一句话说清思路】
			因为该博客的两位作者瞎几把乱吹(" ̄︶ ̄)人( ̄︶ ̄")用彼此的智慧总结出了两条全新的定理(高度复杂度定理.特异根特异树定理),转载请务必说明出处.(逃 Pass:anuonei, ... 
- Ubuntu18.04格式化U盘为NTFS的方法
			1.先安装工具ntfs-3g sudo apt-get install ntfs-3g 2.找到需要格式化的U盘在系统中的序号 df -h 找到U盘的序列号后记下来,例如“/dev/sdd1” 3.解 ... 
- Codeforces Round #527 (Div. 3)  C. Prefixes and Suffixes
			题目链接 题意:给你一个长度n,还有2*n-2个字符串,长度相同的字符串一个数前缀一个是后缀,让你把每个串标一下是前缀还是后缀,输出任意解即可. 思路;因为不知道前缀还是后缀所以只能搜,但可以肯定的是 ... 
- 《Link Prediction with Personalized Social Influence》论文解读
			论文:Huo, Zepeng, Xiao Huang, and Xia Hu. "Link Prediction with Personalized Social Influence.&qu ... 
- java Socket实例
			可以实现客户端与服务端双向通信,支持多客户端连接,客户端断开连接,服务端不会出现异常 服务端代码: package com.thinkgem.jeesite.modules.socketTest.de ... 
- 2018-2019-1-20165221&20165225 《信息安全系统设计》实验五:通讯协议设计
			2018-2019-1-20165221&20165225 <信息安全系统设计>-实验五:通讯协议设计 OpenSSL学习: 简介: OpenSSL是为网络通信提供安全及数据完整性 ... 
- 关于Android8及以上版本自定义广播无法接收问题
			高版本Android直接发送广播是无法接收的 e.g. sendBraodcast(intent); 需要在前面加上(前一个String为接收广播应用的项目地址,后一个为该广播类的地址) intent ... 
- CV code references
			转:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction: SIFT [1] [Demo program][SI ... 
- Java中的String、StringBuilder以及StringBuffer
			https://www.cnblogs.com/dolphin0520/p/3778589.html 
