UVa 1591 - Data Mining(暴力)

特别抽象的一道题,给出数据总量n,数组p的元素大小sp,数组q元素大小sq,求使Qofs'(i)=(Pofs(i)+Pofs(i)<<A)>>B成立的A、B 的值,和q数组占用的空间k。

一开始没看懂题目,翻译之后感觉不知从何下手。直到看到了 code4101 的博文:http://blog.csdn.net/code4101/article/details/38540759

只需要从枚举32以内的A、B并判断是否合法即可,最终保留最小的k和使k最小的a、b。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<cstdio>
typedef long long LL;
int main(){
LL n,sp,sq;
while(~scanf("%lld%lld%lld",&n,&sp,&sq)){
LL best=(LL)1<<62,a,b,aa=0,bb=0;
for(a=0;a<32;++a)
for(b=0;b<32;++b){
LL cur=(((n-1)*sp+((n-1)*sp<<a))>>b)+sq;
if(cur>=n*sq&&cur<best) best=cur,aa=a,bb=b;
}
printf("%lld %lld %lld\n",best,aa,bb);
}
return 0;
}

** 本文迁移自我的CSDN博客,格式可能有所偏差。 **