「 Luogu P3137 」X 「 USACO16FEB 」 圆形谷仓

# 题目大意

管理大大给修下 $\text{Markdown}$ 吧,严重影响做题体验啊。

这道题的意思很简单就是给你一个长度是 $n$ 的环,这个环上不均匀的分布着 $n$ 头奶牛。一头奶牛移动要花费的代价是距离的平方,现在让你求出使得每个点上都有一头奶牛需要花费的最小代价,注意,奶牛只能顺时针移动。

# 解题思路

首先断环成链这个大家应该都知道,就是将原序列 copy 一份放到后面去。

然后考虑如果一头奶牛在移动的过程中没有经过其他奶牛,那这一定是最优的方案。还有就是如果一个点有奶牛,那将奶牛运到它顺时针防线上离它连续一段 $0$ 的最后一个 $0$。

枚举初始位置,从初始位置开始如果遇到有牛的地方,就将这个位置放到优先队列 (小根堆) 里,在往后扫的过程中将其慢慢移动过来。

直观的说就是下面这个式子:

$$a^2+b^2<(a+b)^2$$

# 附上代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
int n, a[2003], cnt, ans = 1e9;
priority_queue <int, vector<int>, greater<int> > Q;
bool flag = true;
int main() {
    scanf("%d", &n);
    for(int i=1; i<=n; i++) {
        scanf("%d", &a[i]);
        a[i+n] = a[i];
    }
    static int tmp;
    for(int i=1; i<=n; i++) {
        cnt = 0, flag = true;
        for(int j=i; j<=i+n-1; j++) {
            if(Q.empty() && a[j] == 0) {flag = false; break;}
            tmp = a[j];
            while (tmp--) Q.push(j);
            tmp = Q.top(), Q.pop();
            cnt += (tmp-j) * (tmp-j);
        }
        if(!flag) continue;
        ans = min(ans, cnt);
    }
    printf("%d", ans);
}

原文地址:https://www.cnblogs.com/bljfy/p/9629879.html

时间: 2024-08-29 07:42:32

「 Luogu P3137 」X 「 USACO16FEB 」 圆形谷仓的相关文章

Linux 小知识翻译 - 「Linux」和「发行版」之间的关系

「Linux」本来指的仅仅是内核.5年之前大多都是这么认为的,但是最近不这么说了. 最近一般都说「Linux」是个 OS,这里的OS,不仅仅是内核,而是指电脑的整体环境(除了内核,还包括一些外围的软件). 内核本来是作为硬件和各种应用软件之间的桥梁而存在的,只有内核的PC是无法使用的. 因此,会将各式各样的软件和内核组合在一起,作为一个可以运行的OS来打包,打包后的OS就被称为「Linux发行版」. 最近,把「Linux发行版」称为「Linux」的情况也比较多了. 但是,「Linux内核」只有一

Linux 小知识翻译 - 「Unix」和「兼容Unix的OS」

经常有人会问「Linux和Unix有什么区别?」,「Linux就是Unix吗?」. 回答一般都是「Linux是仿照Unix而开发的OS」,「Linux和Unix相似但不是一种OS」之类的. 关于「Linux和Unix」,这其中还有些故事. 首先,「Unix」是1970年左右由美国AT&T公司的贝尔实验室开发,并将开发推进下去而形成的OS. 现在,「Unix」这个商标由The Open Group所拥有,因此可以说「Linux不是Unix」. 另一方面,还有一个「Linux不是Unix」的理由.1

「数据结构」和「数据类型」两个概念的本质是什么,区别与联系是什么?

数据结构:相互之间存在一种或多种特定关系的数据元素的集合. 数据类型:是指一组性质相同的值得集合及定义在此集合上的一些操作的总称. 网友观点:数据类型是数据的一种分类,是按照数据结构来分类的.数据类型的出现是为了把数据分成所需内存大小不同的数据. 数据结构强调结构,即元素间的关系:数据类型强调类型,即作用于元素的合法操作. 「数据结构」和「数据类型」两个概念的本质是什么,区别与联系是什么?

世界上最遥远的距离莫过于:「暑假前」和「暑假后」

相信很多人开学第一天的反应都是这样的:不过一个暑假,怎么一切都变得陌生了? 整个学院,焕然一新,清一色的白墙,换上了各种小清新的鹅黄.淡粉,俨然进入了「童话世界」: 校园里挂满了各种欢迎新生的创意横幅,「防火.防盗.防学长」之类的调侃,随处可见: 隔壁班那个心仪的男孩,依然「耀眼」,只是一个暑假后,他的身边俨然多了一个十指相扣的「她」: 就连同一寝室那些曾经最为亲近的人,也变得倍感「陌生」. 分分钟让人徒添一种感慨:世界上最遥远的距离莫过于:「暑假前」和「暑假后」. 人与人之间的差距,是从假期拉

SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法

用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助啦!收尋了一下,終於被小弟找到原因了- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@

《iOS「通告机制」及由其引出的对「架构模式」、「设计模式」的理解

说明:为了区别「本地通知」与「推送通知」这两种iOS中提醒用户,可见的「通知」,本文所将Notification翻译为「通告」.它们的详细区别,可参考<iOS开发系列--通知与消息机制>一文. 实践遇到的问题: 最近在维护公司的一个项目中,遇到这样一个报错:-[GlobalManager addAlbum:]: unrecognized selector sent to instance 经排查,原因如下:以前同事在利用「通告机制」在GlobalManager类中把「自己/self」注册为「观

七牛云荣获「2018 中国云计算产业领军企业」称号

12 月 20 日,以「驾驭数字化转型走进智能互联时代」为主题的 2018 中国软件大会暨首届 CIO 创新峰会在北京新世纪日航饭店举行. 作为引领中国软件和信息技术服务产业发展的风向标和产业年度盛典,会上,隆重颁发了「2018 中国云计算产业领军企业」奖项.七牛云受邀出席,凭借其在云计算服务领域取得的优异成绩,荣获「2018 中国云计算产业领军企业」称号. 七牛云荣获「2018中国云计算产业领军企业」称号 中国软件大会自创办以来,一直紧跟时代步伐,把握行业热点,保持着高水准的思想内容和前沿观察

「十二省联考 2019」字符串问题

「十二省联考 2019」字符串问题 解题思路 傻逼题.. 考虑问题转化为一个A串向其支配的所有B串的后缀A串连边,如果有环答案 \(-1\) 否则是这个 \(\text{DAG}\) 上最长路径,直接建图是 \(n^2\) 的,考虑优化建图即可. 由于 \(A,B\) 都是原串的一个子串,那么对原串的反串建 SAM,一个子串的后缀就是其所在节点上比它长的串以及,其子树里的所有串. 首先将所有 \(A,B\) 串在 SAM上用倍增定位并新建节点,把SAM上每个节点拆成入点和出点,对于SAM每一个节

「十二省联考 2019」字符串问题 解题报告

「十二省联考 2019」字符串问题 当场就去世了,我这菜人改了一下午 考虑一个A,B之间的连边实际表示了两个A之间的有向边,然后把A的连边处理好,就转成了拓扑排序找环+最长链 但是边数很多,考虑优化连边 A,B之间的连边显然没法优化的,考虑一个B可以表示所有它的后缀A 把串反向建出SAM,然后一个B的后缀就是par树的子树 可以拿倍增定位 好了这题就没了 注意到一个事情,定位的点可能重复,于是对SAM拆点,每个点挂一个vector表示一个A或者B的点在SAM的这个位置 然后考虑如何连边 一个B所