提交记录 8089


用户 题目 状态 得分 用时 内存 语言 代码长度
codesonic 1000. 测测你的 A+B Compile Error 0 0 ns 0 KB C++ 1.02 KB
提交时间 评测时间
2019-01-28 19:52:37 2020-08-01 01:12:24
/*
这个摸底考试突然变得好难... 
100%?0%?
*/

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>

typedef long long uint64;

const int MAXN = 100000;
const int LOG = 20;
const uint64 INF = 1e14;

uint64 f1[LOG + 10], f2[LOG + 10];
uint64 a[MAXN+10];
int n;

int main() {
	freopen("A.in", "r", stdin);
	freopen("A.out", "w", stdout);
	
	int i, j;
	uint64 res=INF; 
	uint64 asum=0, bsum=0;
	
	scanf("%d", &n);
	for(i=1; i<=n; i++){
		scanf("%llu", &a[i]);
		asum+=a[i];
		bsum+=int(log2(a[i])); 
	}
	
	for(i=1; i<=LOG; i++) f2[i]=INF;
	f2[0]=0;
	for(i=1; i<=n; i++) {
		asum-=a[i];
		bsum-=int(log2(a[i]));
		for(j=0; j<=LOG and j<=i; j++) {
			f1[j]=f2[j]+a[i]*(1<<j);
			if(j) f1[j]=std::min(f1[j], f2[j-1]+int(log2(a[i]))+j-1);
			if(i^n and f1[j]^INF){
				res=std::min(res, f1[j]+asum*(1<<j));
				res=std::min(res, f1[j]+bsum+(uint64)(j+j+n-i-1)*(n-i)/2);
			}
		}
//		printf("%llu\n", res);
		memcpy(f2, f1, sizeof(f1));
	}
	
	printf("%llu\n", res);
	return 0;
}

// j, j+1, ..., j+(n-i-1)
// 0..n-i-1
// (j+j+n-i-1)*(n-i)/2

CompilationN/AN/ACompile ErrorScore: N/A


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-07 09:45:13 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠