Codeforces Round #633 (Div. 2) 比赛人数12032
[codeforces 1339C] Powered Addition 填上最大的坑
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1339/problem/C
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
C - Powered Addition | GNU C++17 | Accepted | 46 ms | 400 KB |
比赛时,B题受阻,无奈转战C题,出奇的顺利,想法,代码一气喝成,尽然没动几下笔。
手工算法如下
4
1 7 6 5
2
位置1 2 3 4
数值1 7 6 5
焦点在于位置2(对应值7),4(对应值5)
需填上这个最大的坑7-5=2
2^(1-1)=1第1次
2^(2-1)=2第2次
2^(1-1)+2^(2-1)>=2
坑填上了
具体可结合代码进行研究,AC代码如下
#include <cstdio>
#include <algorithm>
#define maxn 100010
#define LL long long
using namespace std;
int a[maxn];
int main(){
int t,n,i,mx,delta;
LL b,c;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
mx=a[1],delta=0;
for(i=2;i<=n;i++){
mx=max(mx,a[i]);//mx对应a[1]-a[i]之间最大的值
if(a[i]<mx)delta=max(delta,mx-a[i]);//delta对应a[1]-a[i]之间,最大的坑
}
if(delta==0){printf("0\n");continue;}//不用填坑,特判
b=0;
for(i=1;;i++){
if(i==1)c=1;
else c=c*2;//c用来计算的2幂次
b+=c;//b对应用来填坑的数据
if(b>=delta)break;
}
printf("%d\n",i);
}
return 0;
}