博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[UOJ #21]【UR #1】缩进优化
阅读量:6999 次
发布时间:2019-06-27

本文共 783 字,大约阅读时间需要 2 分钟。

题目大意:给你$a_i$,表示第$i$行有$a_i$个空格,你需要确定一个$TAB$宽度,使得剩下的字符最少

题解:做前缀和,发现枚举$TAB$暴力求解是$O(n\log_2n)$的,完全可以过

卡点:

 

C++ Code:

#include 
#include
#define maxn 1000010const long long inf = 0x3f3f3f3f3f3f3f3f;int n, M;long long __s[maxn], sum, ans, *s = __s + 1;int main() { scanf("%d", &n); for (int i = 1, x; i <= n; i++) { scanf("%d", &x); s[x]++; sum += x; M = std::max(x, M); } ans = sum; for (int i = 1; i <= M; i++) s[i] += s[i - 1]; for (int i = 2; i <= M; i++) { long long res = 0, j; for (j = i; j <= M; j += i) { res += (s[j - 1] - s[j - i - 1]) * (j / i - 1); } res += (s[M] - s[j - i - 1]) * (M / i); ans = std::min(ans, sum - res * (i - 1)); } printf("%lld\n", ans); return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/9799455.html

你可能感兴趣的文章