封杀病毒
时间限制(普通/Java):20000MS/30000MS 运行内存限制:65536KByte
总提交:883 测试通过:108
总提交:883 测试通过:108
描述
最近H1N1病毒很猖狂。有小道消息说这种病毒来自实验室。
生物学家发现,H1N1型病毒的基因十分奇怪,科学家已经对它的基因图谱做了分析,发现可以用一种编号制度给它的碱基编号。
编号工作完成后,科学家又惊奇地发现一对神奇的碱基,它没有在基因中出现。找到这对碱基,将有可能是控制疾病的突破口。
已知碱基由1到2^k(2的k次方)编号的。科学家用一种长度为2^k的记忆条存储碱基信息:如果碱基i出现了,就在记忆条的坐标i处做个标记。
工作还是比较顺利的,但老眼昏花的科学家找那个丢失的碱基号码的时候,老是晕头转向,屡找屡败。
现在这项工作交给你,希望你能力挽狂澜。
输入
有多组测试数据。
每组测试数据第一行一个整数k表示碱基的数目为2^k(1<=k<=20)。
第二行到第2^k行每行一个整数表示找到的一碱基的编号(并不是按顺序给出的)。
输出
输出那对关键碱基的编号。
样例输入
2
4
1
3
样例输出
2
题目来源
此题数据有误,请各位同学等待数据更正后再提交。
分析:用高斯求和求出1~2^k的和,减去输入的数,结果即为输出。
#include<stdio.h>
#include<math.h>
//封杀病毒
int main()
{
int k, tmp;
__int64 sum, sum1 = 0;
scanf("%d",&k);
sum = (1+pow(2.0, k))*pow(2.0, k)/2;
for(int i=0;i<pow(2.0, k)-1;i++)
{
scanf("%d",&tmp);
sum1 += tmp;
}
printf("%I64d\n",sum-sum1);
return 0;
}