计蒜客NOIP2017提高组模拟赛(五)day1-展览
传送门
发现这题选或不选对状态的优劣程度不会产生影响,如果已经确定了两个数a和b,那么最优的首项和公比也都是唯一确定的,
与对于后面的数x,加进去也好不加进去也好,首项和公比依旧是原来的
于是我们用尺取算法,用两个指针来扫一遍,
如果只有一个数且下一个数能被整除,就加进去,然后确定首项和公比
如果只有一个数且下一个数不能整除,两个指针直接指向下一个数
如果有多个数且下一个数满足公式,就加进来
如果有多个数且下一个数不满足公式,两个指针直接指向下一个数
这样对于最优解,一定是可以找到的
顺便说下最优的公比和首项的确定:
已知两个数x y,求满足它们的最优的首项 公比
设x=a*q^k1 y=a*q^k2 且x>y
那么x/y得到q^(k1-k2),
由于最优的公比一定尽可能小,所以要使指数尽可能大,就把q质因数分解,指数取gcd提出
这样就得到了公比,拿这个公比不断地除以一开始的x,就得到了首项
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define INF 0x7f7f7f7f
#define pii pair<int,int>
#define ll long long
#define MAXN 100005
using namespace std; ll read(){
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n;
set<ll> s;
ll a[MAXN];
int gcd(int x,int y){
return (y==?x:gcd(y,x%y));
}
ll Pow(ll x,ll y){
ll ret=;
while(y){
if(y&){
ret*=x;
}
x*=x;
y>>=;
}
return ret;
}
int gt(ll x,ll y,ll &b,ll &q){
ll t=x/y;
if(==t){
b=x,q=;
return ;
}
vector<pii> vs;
for(int i=;i<=;i++){
if(t%i==){
int cnt=;
while(t%i==){
cnt++;
t/=i;
}
vs.push_back(make_pair(i,cnt));
}
}
if(t>){
return -;
}
int g=vs[].second;
for(int i=;i<vs.size();i++){
g=gcd(g,vs[i].second);
}
q=;
for(int i=;i<vs.size();i++){
q*=Pow((ll)vs[i].first,(ll)vs[i].second/g);
}
b=y;
while(b%q==){
b/=q;
}
return ;
}
int check(ll x,ll b,ll q){
if(x%b){
return ;
}
if(q==){
return (x==b);
}
if(s.count(x)){
return ;
}
x/=b;
ll t=q;
int L=,R=log(1.0*x)/log(1.0*q)+;
while(R-L>){
int mid=(L+R)/;
ll t=Pow(q,(L+R)/);
if(t>=x){
R=mid;
}
else{
L=mid;
}
}
if(Pow(q,L)==x||Pow(q,R)==x){
return ;
}
return ;
}
int main()
{
// freopen("seq2.in","r",stdin);
// freopen("seq.out","w",stdout);
n=read();
for(int i=;i<=n;i++){
a[i]=read();
}
int L=,R=;
int ans=;
ll b=,q=;
s.insert(a[]);
for(int i=;i<=n;i++){
ll t1=a[R],t2=a[i];
if(t1<t2){
swap(t1,t2);
}
if(t1%t2!=){
s.clear();
s.insert(a[i]);
L=i,R=i;
continue;
}
if(L==R){
R++;
s.insert(a[R]);
if(-==gt(t1,t2,b,q)){
L++;
s.clear();
s.insert(a[L]);
}
}
else if(check(a[i],b,q)){
R++;
if(q!=)
s.insert(a[R]);
}
else{
s.clear();
s.insert(a[i]);
L=i,R=i;
}
ans=max(ans,R-L+);
}
printf("%d\n",ans);
return ;
}
计蒜客NOIP2017提高组模拟赛(五)day1-展览的更多相关文章
- 计蒜客NOIP2017提高组模拟赛(三)day1
火山喷发 火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 n 个生物分别具有 A1,A2,⋯,An点生命值,一次火山喷发总计 MM 轮 ...
- 计蒜客NOIP2017提高组模拟赛(四)day1
T1:小X的质数 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小 X 认为,质数是一切自然数起源的地方. 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的 ...
- 计蒜客NOIP2017提高组模拟赛(五)day1-机智的 AmyZhi
传送门 很水的题目啦QAQ #include<cstdio> #include<cstdlib> #include<algorithm> #include<c ...
- 计蒜客NOIP2017提高组模拟赛(五)day2-蚂蚁搬家
传送门 这题可以用线段树来维护 #include<cstdio> #include<cstdlib> #include<algorithm> #include< ...
- 计蒜客NOIP2017提高组模拟赛(五)day2-成绩统计
传送门 用hash,因为map的复杂度可能在这题中因为多一个log卡掉,但是hash不会 可能因为这个生成的随机数有循环的情况,不是完全均匀的 而且这题hash表的长度也可以开的很大 #include ...
- 计蒜客NOIP2017提高组模拟赛(三)day2-数三角形
传送门 这题有点坑啊 设A为两边颜色不同的角,B为两边颜色相同的角 那么考虑三种三角形:异色,同色,其他 对于任何一个异色三角形,一定会有三个颜色不同的角, 对于任何一个同色三角形,一定会有零个颜色不 ...
- 计蒜客NOIP2017提高组模拟赛(三)day2-直线的交点
传送门 简单几何+逆序对 发现当两条直线甲乙与平板的交点在上面甲在较左的位置,那么下面甲在较右的位置就可以相交 然后把上面的位置排下序,下面离散化+树状数组即可 #include<cstdio& ...
- 计蒜客NOIP2017提高组模拟赛(三)day2-小区划分
传送门 dp,注意边界 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cst ...
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
随机推荐
- 敏捷开发冲刺--day3
1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285) Git链接:https://github.com/WHUSE2017/C-team 2 ...
- 201421123042 《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 答: 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户 ...
- LR录制脚本的时候打不开浏览器问题
使用Chrome时,显示开始录制但是Action中无任何脚本,即脚本没成功生成. 使用Firefox(最新版),一直关闭程序,详细信息有StackHash_0a9e. 使用IE11时,也是显示开始录制 ...
- nyoj Dinner
Dinner 时间限制:100 ms | 内存限制:65535 KB 难度:1 描述 Little A is one member of ACM team. He had just won t ...
- javascript单例模式及开发实践
定义: 保证一个对象(类)仅有一个实例,并提供一个访问它的全局访问点: 实现原理: 利用闭包来保持对一个局部变量的引用,这个变量保存着首次创建的唯一的实例; 主要用于: 全局缓存.登录浮窗等只需要唯一 ...
- hadoop2.7.3+spark2.1.0+scala2.12.1环境搭建(1)安装jdk
一.文件准备 下载jdk-8u131-linux-x64.tar.gz 二.工具准备 2.1 Xshell 2.2 Xftp 三.操作步骤 3.1 解压文件: $ tar zxvf jdk-8u131 ...
- python入门(3)python的解释器
python入门(3)python的解释器 Python写的程序是以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开源的, ...
- python爬虫requests 下载图片
import requests # 这是一个图片的url url = 'http://yun.itheima.com/Upload/Images/20170614/594106ee6ace5.jpg' ...
- python当中的生成器
最近身边的朋友都在问我迭代器是什么回事,经常跟大家一起讨论python的迭代器,一点点的我觉着自己有了更深一层的理解.我写下这篇文章,希望能对懵懵懂懂的好伙伴有些帮助~ 我也不是什么能人,难免说错一些 ...
- Centos7 安装python3
Centos7 安装python3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #安装sqlite-devel yum -y ...