这一道题参考了其他人的博客分析,最后结果只与最大值有关,属于一道数学题。
计算:MAX * 2^(n-1)即可。
而题目中提示了数字可能会很大,需要求对20006的余数,所以每次乘2都可以对2006取模,这样可以保证数据范围不会超过。
好了,代码:
#include<stdio.h>
#define N 1005
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); ++i)
int find(int num[],int k){
int max = num[0];
rep(i, k)
{
if (num[i]>max) max = num[i];
}
return max;
}
int main(){
int n, data[N];
while (scanf_s("%d",&n)==1&&n!=0)
{
rep(i, n)
scanf_s("%d", &data[i]);
int max = find(data,n);
max = max % 2006;
if (max < 0) max += 2006;
int ans=max;
rep(i, n-1)
{
ans *= 2;
ans %= 2006;
}
printf("%d\n", ans);
}
}