Codeforces - 1428E. Carrots for Rabbits
题目链接
题解:
考虑将一个胡萝卜分成K段,那么这个胡萝卜肯定是尽可能的均分才能贡献最小
因为一个胡萝卜切的次数越多,x / cnt下降的越少,因此胡萝卜切的次数越多,它的平方和减少的越少
那么可以用优先队列维护平方和下降的值,每次减去贡献平方和减少最多的胡萝卜即可
代码:
/** @Author : Nightmare*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ull unsigned long long
#define PII pair<int,int>
#define ls 2 * rt
#define rs 2 * rt + 1
#define gcd(a,b) __gcd(a,b)
#define eps 1e-6
#define lowbit(x) (x&(-x))
#define N 100005
#define M 100005
#define mod 1000000007
#define inf 0x3f3f3f3f
struct node{int a, b, c;friend bool operator < (node x, node y){ return x.a < y.a; }
};
priority_queue<node> que;
int cut(int a, int x){int m = a / x, t = a % x;return t * (m + 1) * (m + 1) + (x - t) * m * m;
}
void solve(){int n, k, ans = 0; cin >> n >> k;for(int i = 1, x; i <= n ; i ++) cin >> x, ans += x * x, que.push({cut(x, 1) - cut(x, 2), x, 2});for(int i = n ; i < k ; i ++){int a = que.top().a, b = que.top().b, c = que.top().c; que.pop();ans -= a;que.push({cut(b, c) - cut(b, c + 1), b, c + 1});}cout << ans << '\n';
}
signed main(){#ifndef ONLINE_JUDGEfreopen("D:\\in.txt", "r", stdin);
#endifsolve();
#ifndef ONLINE_JUDGEcerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endifreturn 0;
}
Codeforces - 1428E. Carrots for Rabbits相关推荐
- codeforces 1428E. Carrots for Rabbits(贪心(非常优秀的贪心题),结构体重载运算符)
题目链接:https://codeforces.ml/contest/1428/problem/E 题意:给定n个数,要求将这些数拆分为k个数,是这些数的平方和最小. 题解:结构体,一开始想到的是每次 ...
- Codeforces 1428E Carrots for Rabbits 贪心
文章目录 题意 题解 题目链接 我又掉了. CF上少见的优秀贪心题,有必要拿出来讲一下. 题意 n个数切成k份,求切出数的平方和的最小值. 题解 首先证明当对一个数字切的份数越多,因切分而减少的平方和 ...
- Codeforces 1428E Carrots for Rabbits
今天这题是一个非常不错的思维题,贪心专业户的我表示非常满足. 题目链接:题目 题意:将n个数字拆分成k个,比如5可以拆分为(1+1+2)变成3个.拆完之后求拆出来的所有数字的平方和最小为多少 思路:首 ...
- 【做题记录】CF1428E Carrots for Rabbits—堆的妙用
CF1428E Carrots for Rabbits 题意: 有 \(n\) 个萝卜,每个萝卜的初始大小为 \(a_i\) .现在要把这些萝卜切为为 \(k\) 个.吃每一个萝卜的时间为这个萝卜的大 ...
- (贪心)CF1428E. Carrots for Rabbits
CF1428E. Carrots for Rabbits 题意: 给你nnn个正整数,分成kkk个正整数,要求分好之后∑i=1kai2\sum\limits_{i=1}^{k}{a_i}^{2}i=1 ...
- Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits(贪心)
传送门 题目大意 给出nnn个萝卜,现在需要分成长度为正整数的若干个萝卜,定义每个长度为xxx的胡萝卜贡献为x2x^2x2,问最小的贡献是多少. 解题思路 手玩一下样例,还是不难得出对于一个胡萝卜若需 ...
- acm-(贪心)Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits
传送门 本题的贪心十分巧妙,我们考虑将所有数字的划分状态表示为(x,cur,v)(x,cur,v)(x,cur,v)的形式,xxx代表数字值,curcurcur为当前xxx被分成的份数,vvv代表从c ...
- Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)
原题链接 题意 有N个萝卜,K只兔子,要求把N个萝卜分成K份,一个兔子吃一个长为X的萝卜的时间为X*X,求怎么分能使最后的时间最短. 思路 刚看到这个题的时候,刚开始的思路是,把所有的萝卜都存在一个大 ...
- codeforces(E. Carrots for Rabbits)贪心
题目链接 给你n个数,每个数再被切分若干份(整数),比如5可以切分为2.3或2.2.1等 通过切割将n个数变成k个数,使这k个数的平方和最小. 一开始是想将所有数放在一个优先队列里,每次取出最大的一分 ...
最新文章
- ssd2828测试进入测试模式_LOL卡牌推出“远征”轮抽模式 本周再度开启线上测试...
- 前端教程分享:十行代码实现title滚动显示
- java source folder作用_java项目把源码放到folder里,不是source folder,这个java代码还能被调用吗?...
- python eureka服务发现_Spring Cloud版——电影售票系统—Eureka微服务注册与发现
- python文件合法模式组合_以下选项中,不是Python文件二进制打开模式的合法组合是...
- sphinx服务器安装及配置详解
- Layui数据表格动态cols(字段)动态变化(2)
- linux中定义用户账户的文件为,Linux中用户和组中认证库和解析库的文件格式以及默认参数定义文件...
- java B2B2C Springcloud电子商城系统- Gateway初体验
- 工作室多拨宽带如何优化?
- 解决gateway转发websocket出现Max frame length of 65536 has been exceeded
- GWA2吉娃兔升級基於事件驅動的緩存處理模塊
- 英语阅读小程序云开发项目
- javacv 视频转换
- 吴恩达对话刘慈欣 预言AI未来20年
- 2021-09-30-THZ-前置
- 淘宝天猫乐高的销售情况
- 大学里不该做的十件事
- Window 下载安装 Kafka
- 安卓pdf阅读器_BOOX阅读器:不仅阅读效果逆天,PDF阅读和手写体验更出色!