bzoj 2257: [Jsoi2009]瓶子和燃料
来源:互联网 发布:php webservice教程 编辑:程序博客网 时间:2024/04/28 03:15
题意:
在n个数中选k个数,使他们gcd最大。
题解:
上面的模型转化用裴蜀定理。
我是这么想的,将所有数的因数取出来,插到线段树上,然后找最大的且值大于k的点。
感觉时间空间都要炸。
然而开小空间后跑的飞快。
可能是平均每个数的因数不多吧。
code:
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<cmath>using namespace std;const int inf=1000000000;struct trnode{ int lc,rc,c;}tr[10000000];int tot=0,root=0;int n,k;void update(int &x,int l,int r,int k){ if(!x) x=++tot; if(l==r){tr[x].c++;return;} int mid=(l+r)/2; if(k<=mid) update(tr[x].lc,l,mid,k); else update(tr[x].rc,mid+1,r,k); tr[x].c=max(tr[tr[x].lc].c,tr[tr[x].rc].c);}void pre(int a){ int len=sqrt(a); for(int i=1;i<=len;i++) if(a%i==0) { update(root,1,inf,i); if(i*i!=a) update(root,1,inf,a/i); }}int main(){ scanf("%d %d",&n,&k); for(int i=1;i<=n;i++) { int x;scanf("%d",&x); pre(x); } int l=1,r=inf,x=root; while(l<r) { int rcc=tr[tr[x].rc].c,mid=(l+r)/2; if(rcc>=k) x=tr[x].rc,l=mid+1; else x=tr[x].lc,r=mid; } printf("%d",l);}
阅读全文
2 0
- BZOJ 2257 JSOI2009 瓶子和燃料 数论
- BZOJ 2257 [Jsoi2009]瓶子和燃料
- BZOJ 2257: [Jsoi2009]瓶子和燃料
- BZOJ 2257 [Jsoi2009] 瓶子和燃料
- bzoj 2257: [Jsoi2009]瓶子和燃料
- bzoj 2257: [Jsoi2009]瓶子和燃料
- BZOJ 2257: [Jsoi2009]瓶子和燃料 数论
- 2257: [Jsoi2009]瓶子和燃料
- 2257: [Jsoi2009]瓶子和燃料
- 2257: [Jsoi2009]瓶子和燃料
- bzoj 2257: [Jsoi2009]瓶子和燃料 裴蜀定理
- bzoj 2257: [Jsoi2009]瓶子和燃料 (gcd+map)
- bzoj 2257: [Jsoi2009]瓶子和燃料(裴蜀定理)
- BZOJ 2257: [Jsoi2009]瓶子和燃料 裴蜀定理
- BZOJ 2257 [Jsoi2009]瓶子和燃料 裴蜀定理
- bzoj 2257 瓶子和燃料
- [BZOJ2257][Jsoi2009]瓶子和燃料
- BZOJ2257: [Jsoi2009]瓶子和燃料
- SPOJ NSUBSTR Substrings
- bzoj3991 [SDOI2015]寻宝游戏 (虚树+set+dfs序 )
- 加帕里的聚会 (树链剖分 双标记线段树)
- 理解HTTP幂等性
- mac查看进程
- bzoj 2257: [Jsoi2009]瓶子和燃料
- selenium 基于python学习笔记---【3-2】
- 每天一个linux命令-find之参数详解
- Codeforces Round #436 (Div. 2)-贪心-D. Make a Permutation!
- bootstrap笔记①
- php单例模式,懒加载
- Java:异常
- 4.go开源cache2go项目笔记——cacheitem文件
- 数据传输-嵌入式