封杀病毒
时间限制(普通/Java)
:
20000 MS/ 30000 MS 运行内存限制 : 65536 KByte
总提交 : 1010 测试通过 : 155
AC代码:
总提交 : 1010 测试通过 : 155
比赛描述
最近H1N1病毒很猖狂。有小道消息说这种病毒来自实验室。
生物学家发现,H1N1型病毒的基因十分奇怪,科学家已经对它的基因图谱做了分析,发现可以用一种编号制度给它的碱基编号。
编号工作完成后,科学家又惊奇地发现一对神奇的碱基,它没有在基因中出现。找到这对碱基,将有可能是控制疾病的突破口。
已知碱基由1到2^k(2的k次方)编号的。科学家用一种长度为2^k的记忆条存储碱基信息:如果碱基i出现了,就在记忆条的坐标i处做个标记。
工作还是比较顺利的,但老眼昏花的科学家找那个丢失的碱基号码的时候,老是晕头转向,屡找屡败。
现在这项工作交给你,希望你能力挽狂澜。
输入
有多组测试数据。
每组测试数据第一行一个整数k表示碱基的数目为2^k(1<=k<=20)。
第二行到第2^k行每行一个整数表示找到的一碱基的编号(并不是按顺序给出的)。
输出
输出那对关键碱基的编号。
样例输入
2
4
1
3
样例输出
2
题意和思路都很简单。。唯一注意的就是头文件cmath里面pow & sqrt函数的原型:
double pow ( double base, double exponent );
long double pow ( long double base, long double exponent );
float pow ( float base, float exponent );
double pow ( double base, int exponent );
long double pow ( long double base, int exponent );
double sqrt ( double x );
float sqrt ( float x );
long double sqrt ( long double x );
AC代码:
#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
#include "cmath"
using namespace std;
typedef long long ll;
int main(int argc, char const *argv[])
{
int k;
while(scanf("%d", &k) != EOF) {
ll ans = (ll)(pow(2.0, k) + 1) * (ll)pow(2.0, k - 1), num = (ll)pow(2.0, k), a;
for(ll i = 0; i < num - 1; ++i) {
scanf("%lld", &a);
ans -= a;
}
printf("%lld\n", ans);
}
return 0;
}