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 题解 还是分两个操作来说吧. 先看第一个操作,放球,可以发现,对于祖先节点和后代节 ...
随机推荐
- Cards BZOJ 1004
Cards [问题描述] 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张 ...
- linux的内存性能评估
linux的内存性能评估 参考自:自学it网,http://www.zixue.it/. (1)使用free指令监控内存,参数-m以M为单位显示,-h人性化显示单位. [test@localhost ...
- git使用快速入门
git简介 git是一种版本控制器,更直白的说,团队开发的时候,管理代码使用的软件 git安装 Windows安装 到 https://www.git-for-windows.github.io/ 下 ...
- Windows Phone 8.1 开发实例 网络编程 天气预报
首先感谢林政老师的博客,给了我很大的指导. 准备工作 我的开发环境: - Visual Studio 2013(With Update 4) - Windows Phone 8.1 - Windows ...
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- Python爬虫之简单的图片获取
简单的静态网页的图片获取: import urllib import re import os url = 'http://www.toutiao.com/a6467889113046450702/' ...
- Java笔试面试题007
Java笔试面试题007 1.请用正則表達式匹配出QQ号(如果QQ号码为5-10位). 解答: ^ \d{5,10}$ 2.String, StringBuffer StringBuilder的差别. ...
- poj 1694 An Old Stone Game 树形dp
//poj 1694 //sep9 #include <iostream> #include <algorithm> using namespace std; const in ...
- weex 小结
1. import 文件时,必须引入全称,不能省略 .vue import mEcharts from '../components/Echarts.vue' 2.weex 的 cli 中没有 配置 ...
- 简单使用 Mvc 内置的 Ioc
简单使用 Mvc 内置的 Ioc 本文基于 .NET Core 2.0. 鉴于网上的文章理论较多,鄙人不才,想整理一份 Hello World(Demo)版的文章. 目录 场景一:简单类的使用 场景二 ...