质量检查(quality)
【问题描述】
食品安全部门要检查一些食品中是否含有违禁成分。现在总共有 n 种食品待查,对于每种食品,他们需要给出是否含有这种成分。对一份样品,检测设备可以输出是否含有违禁成分。由于检测设备相当敏感,如果将多份样品混合,只要其中任何一份含有这种添加剂,设备就会输出“含有”;否则如果设备输出“不含有”,则表示混合样品中的每一种都不含有违禁成分。又由于每次检测都非常昂贵,为了减少检测次数,部门希望有策略地将一些样品混合以后进行检测。
对于每种食品,部门都留存了两份样品,可以认为这两份样品的检测结果一定是一样的,只要确定了其中一份的结果就确定了这种食品的结果。
根据经验,每种食品中是否含有违禁成分是独立同分布的(即相互之间没有任何关联),它们含有该成分的概率都是 k。现在你需要帮食品安全部门设计一个检测的策略,使得检测次数的期望值尽可能少。你只需要输出这个期望值。
【输入格式】
从文件 quality.in 中读入数据。
第一行包含一个正整数 T(1 ≤ T ≤ 105) ,表示这个测试点内的数据组数。接下来 T 行,每行两个数,分别表示 n(1 ≤ n ≤ 106) 、k(0 < k < 1) ,其中 k 最多
包含 6 位小数。
【输出格式】
输出到文件 quality.out 中。
输出 T 行。
每行一个浮点数,表示一组数据的答案,四舍五入精确到整数。
【样例1输入】
2
6 0.1
6 0.3
【样例1输出】
4
6
【子任务】
对于 20%的数据,n ≤ 5 ;
对于 40%的数据,n ≤ 10 ;
对于 60%的数据,n ≤ 2×103 ;
对于 100%的数据,n ≤ 106 ;
在所有子任务中,均匀分布着 50%的数据,满足 T ≤ 100 。
对于 100%的数据,保证准确答案的小数部分不大于 0.4 或不小于 0.6 。
倍数问题(multi)
【题目描述】
众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。
【输入格式】
从文件 multi.in 中读入数据。第一行包括 2 个正整数 n, K。
第二行 n 个正整数,代表给定的 n 个数。
【输出格式】
输出到文件 multi.out 中。
输出一行一个整数代表所求的和。
【样例1输入】
4 3
1 2 3 4
【样例1输出】
9
【样例1解释】
选择 2、3、4。
【子任务】
对于 30%的数据,n ≤ 100。
对于 60%的数据,n ≤ 1000。
对于另外 20%的数据,K ≤ 10。
对于 100%的数据,1 ≤ n ≤ 105,1 ≤ K ≤ 103,给定的 n 个数均不超过 108。
30tps:设$mod[i][j]$表示在第1~n-1位中,两个数的和模k的值为j时的最大值,这样就预处理出了前两个数的情况。枚举第三个数x,答案就是$max \left{ x+mod[i-1][k-x \mod k] \right}$ | $3 \leq i \leq n$
60tps:设$mod[i][j]$表示在第1~n-1位中,一个数模k的值为j时的最大值,这样就预处理出了一个数的情况。枚举剩下两个数即可,方法类上。
原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/9651473.html