BZOJ2257: [Jsoi2009]瓶子和燃料

题目大意:

有n个数,选择k个数,最大化这些数通过加减能得到的最小的正整数。

题解:

这些数通过加减能得到的最小的数为他们的最大公约数。

题目要求n个数字中选择k个使得他们的最大公约数最大。

枚举所有约数,找出最大的且出现次数大于k的约数。

代码:

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int cnt,a[1000005];
void find(int x){
	for (int i=1; i<=sqrt(x); i++)
		if (x%i==0){
			a[++cnt]=i;
			if (i!=x/i) a[++cnt]=x/i;
		}
}
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	for (int i=1; i<=n; i++){
		int x;
		scanf("%d",&x);
		find(x);
	}
	sort(a+1,a+cnt+1);
	int tmp=1;
	for (int i=cnt; i>0; i--){
		if (a[i]==a[i+1]) tmp++;
		else{
			if (tmp>=k){
				printf("%d\n",a[i+1]);
				return 0;
			}
			tmp=1;
		}
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/silenty/p/8893142.html

时间: 2024-10-07 04:42:11

BZOJ2257: [Jsoi2009]瓶子和燃料的相关文章

[BZOJ2257][Jsoi2009]瓶子和燃料(数学)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2257 分析: 1.先考虑确定的瓶子下的最小体积是多少 ①假设只有两个瓶子v1,v2,易得最小体积是它们的最大公约数 ②同理可推得,n个瓶子的最小体积就是这n个瓶子的最大公约数 2.于是题目就变成了在n个数字中选取k个数字,使得这k个数字的最大公约数最大 至于这个可以从大到小枚举所有的因数,知道枚举到第一个因数使得这个因数出现的次数>=k

BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】

2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1326  Solved: 815[Submit][Status][Discuss] Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1<=N<=1000) ,经过协商,火星人只要其中的K 个 . jyy 将 K个瓶子交给

[BZOJ 2257][JSOI2009]瓶子和燃料 题解(GCD)

[BZOJ 2257][JSOI2009]瓶子和燃料 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1<=N<=1000) ,经过协商,火星人只要其中的K 个 . jyy 将 K个瓶子交给火星人之后,火星人用它们装一些燃料给 jyy.所有的瓶子都没有刻度,只 在瓶口标注了容量,第i个瓶子的容量为Vi(Vi 为整数,并且满足1<=Vi<=10000

BZOJ 2257: [Jsoi2009]瓶子和燃料

Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy的飞船上共有 N个瓶子(1<=N<=1000) ,经过协商,火星人只要其中的K 个 . jyy将 K个瓶子交给火星人之后,火星人用它们装一些燃料给 jyy.所有的瓶子都没有刻度,只在瓶口标注了容量,第i个瓶子的容量为Vi(Vi 为整数,并且满足1<=Vi<=1000000000 ) . 火星人比较吝啬,他们并不会把所有的瓶子都

BZOJ 2257 JSOI2009 瓶子和燃料 数论

题目大意:给定n个瓶子,选择k个,可以随便导油,问选择k个瓶子可以导出的油数量的最小值的最大值 首先易知k个瓶子能导出的油最小值一定是k个瓶子容量的最大公因数 于是问题转化成了在n个数中选择k个 使最大公因数最大 找出n个数的所有因数 排序 找出最大的且出现次数大于等于k的输出即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 16001

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

bzoj 1000+AC

1500 [NOI2005]维修数列   5333 16036 1010 [HNOI2008]玩具装箱toy   5205 12140 2049 [Sdoi2008]Cave 洞穴勘测   4992 10282 1008 [HNOI2008]越狱   4820 11120 1503 [NOI2004]郁闷的出纳员   4629 12915 1208 [HNOI2004]宠物收养所   4216 10462 1026 [SCOI2009]windy数   4169 9168 1003 [ZJOI2

[BZOJ1441&amp;BZOJ2257&amp;BZOJ2299]裴蜀定理

裴蜀定理 对于整系数方程ax+by=m,设d =(a,b) 方程有整数解当且仅当d|m 这个定理实际上在之前学习拓展欧几里得解不定方程的时候就已经运用到 拓展到多元的方程一样适用 BZOJ1441 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 该方程有解当且仅当gcd(A1...AN)|s 要求s的值最小,那么答案就是gcd(A1..AN) BZOJ2257 jyy就一直想着尽快回地球,可惜他飞船的燃料不够了.有一天他又去向

BZOJ 口胡记录

最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记.剩下的就是很normal的线段树区间合并和标记下传了. BZOJ 2245 工作安排(费用流) 很normal的拆边费用流.建立虚拟源点s和汇点t.s向产品连边,产品向可以生产它的工人连边,工人向t连边.这里的分段函数是个非递减的分段函数,由于最小费用流的特殊性.这里的分段函数可以用流和费用分割开