bzoj3136: [Baltic2013]brunhilda
这个题为什么会放在数据结构啊
首先因为有决策包容性,对于一个n每次必然选择一个n%p最大的p,令n减n%p
设fi表示i变成0的步数的话,同样我们可以知道f是有单调性的
假如fd能转移到fk,首先d一定是某个p的倍数,并且k-d+1<pi才能够转移
对于一个合法的d,它能够影响的长度就是pp,其中pp|d并且在给出的质数中是最大的,设它为s(d)
由于f有单调性,并且决策点影响的是由它开始往后的一段,那么决策也有单调性,假如我们知道了这个就可以O(n)指针扫决策点更新了
考虑如何求s
我们可以线性筛一次数,并把每个数被那个点标记记录下来,记为gi
先把每个给出的质数标记为自己,那么s(i)=max(s(i/gi),s(gi)) 好妙啊!
gb卡我空间
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=1e5+;
const int maxp=1e7+; int n,p[maxn]; int m,q[maxn];
int f[maxp],s[maxp]; int pr,g[maxp];bool v[maxp];
void dddd(int mx)
{
for(int i=;i<=mx;i++)
{
if(v[i]==false)
{
f[++pr]=i;
g[i]=i;
}
for(int j=;j<=pr&&i*f[j]<=mx;j++)
{
v[i*f[j]]=true;
g[i*f[j]]=f[j];
if(i%f[j]==)break;
}
}
} int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout); scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&p[i]),s[]=max(s[],p[i]);
int mx=;
for(int i=;i<=m;i++)
scanf("%d",&q[i]),mx=max(mx,q[i]); //.....read...... dddd(mx);
s[]=-;
for(int i=;i<=n;i++)s[p[i]]=p[i];
for(int i=;i<=mx;i++)s[i]=max(s[i/g[i]],s[g[i]]); //.....gets...... f[]=;int j=;
for(int i=;i<=mx;i++)
{
while(j<i&&(s[j]==-||f[j]==-||j+s[j]-<i))j++;
if(j==i)f[i]=-;
else f[i]=f[j]+;
} //.....getf..... for(int i=;i<=m;i++)
{
if(f[q[i]]==-)puts("oo");
else printf("%d\n",f[q[i]]);
} //.....print..... return ;
}
bzoj3136: [Baltic2013]brunhilda的更多相关文章
- 【BZOJ 3136】 3136: [Baltic2013]brunhilda (数论?)
3136: [Baltic2013]brunhilda Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 238 Solved: 73[Submit][ ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【BZOJ 3133】 3133: [Baltic2013]ballmachine (线段树+倍增)
3133: [Baltic2013]ballmachine Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 148 Solved: 66 Descri ...
- BZOJ_3133_[Baltic2013]ballmachine_堆+倍增
BZOJ_3133_[Baltic2013]ballmachine_堆+倍增 Description 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树 ...
- [BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆)
[BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆) 题面 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果 ...
- 【JZOJ3318】Brunhilda的生日
description 除去对铁质盔甲强烈的热爱,Brunhilda是一个正常的7岁女孩.近期,她正在策划一个完美的生日派对.她发明了如下的一个游戏:所有的孩子在一个数k被宣读之前不停地跑来跑去.当这 ...
- bzoj3135: [Baltic2013]pipesd
Description 有n个水库,m条管道.Jester会在某些管道中间凿开一个洞,让水流出来或者用水泵把水打进去.保证这个流速是偶数.对于一条管道(u, v),如果在中间凿开了一个洞让水流出来,流 ...
- bzoj3136
Description 给定m个素数和Q个询问.每个询问有n个人,每次操作可以任意选择其中的一个素数p(素数可以重复使用),然后去掉剩余人数 mod p个人.对于每个询问,我们想知道,至少需要多少步操 ...
- BZOJ3133[Baltic2013]ballmachine
题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=3133 题解 还是分两个操作来说吧. 先看第一个操作,放球,可以发现,对于祖先节点和后代节 ...
随机推荐
- bzoj3874&2832 [Ahoi2014]宅男计划 模拟退火,三分
[Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 962 Solved: 371[Submit][ ...
- Unslider--入门篇
Unslider--入门篇 背景:因工作需求,需要完成一个图片轮播效果,因博主不是专业的前端开发人员,so google之,经过挑选最终选择使用Unslider插件完成工作. 一.Unslider插件 ...
- Linux中有硬件时钟与系统时钟
在Linux中有硬件时钟与系统时钟等两种时钟.硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟.系统时钟则是指kernel中的时钟.当Linux启动时,系统时钟会去读取硬件时钟的设 ...
- R语言入门视频笔记--1
一.数据框简要 可输入来访问mtcars这个系统自带的数据框中的mpg列 mtcars$mpg 或者输入 mtcars[c("mpg","cyl")] 来访问两 ...
- 扰动函数和拉链法模拟HashMap的存储结构
HashMap是Map接口下面的子孙,它对外是K,V结构存储的,而内部也着自己的存储结构,它的get操作是O(1)的时间复杂度,可以说是非常快的找到目录,而添加时,也是O(1),所以在键值存储里,它成 ...
- jquery的固定定位效果
今天做了个固定定位的效果.比如对导航需要进行固定定位效果: 当没有滚动到导航下面,导航正常显示. 当滚动到导航下面,导航就固定到顶部. 这个效果使用了jquery的方法实现,具体思路为: 1)首先获取 ...
- java基础 6 基本类型与运算
1 包装类型 Integer的缓存池为 -128 - 127: 八个基本类型 占bit 与字节 8 bit = 1 字节 boolean 1 byte 8 char ...
- 50 个 Bootstrap 插件
Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等. 本文向你 ...
- flask-limiter限制单个IP访问的频率和次数
Flask-Limiter provides rate limiting features to flask routes. It has support for a configurable bac ...
- Shannon-Fano-Elias编码的C语言实现
Shannon-Fano-Elias编码 一.理论分析 Shannon-Fano-Elias编码是利用累积分布函数来分配码字. 不失一般性,假定取X={1,2,-m}.如果对于全部的x,有p(x)&g ...