题不难,但作为一道恶心到了我的题,我还是记录一下的好。

题意:n个人围一圈,要求:相邻两人,分数高的要比分数低的得到更多的糖果,若分数相同则必须得到相同数量的糖果。问满足要求的最少需要分配的糖果数。(N<10^6)

思路:

从最分数最小的人开始分配(当然要很小气的只给1个啦),然后慢慢分,在满足要求的情况下给最小。

实现起来细节稍微有点多。具体实现思路如下:

1:压缩。把相同分数且相邻的多人压缩成一人

2:用一个备份,sort,得到分数从小往大的顺序。

3:按上面的顺序缩糖果。4种情况:[左》中》右]--右+1; [左《中〈右]--左+1; [左《中》右]--max(左,右)+1; [左》中《右]--1

OVER

收获:慢慢理,实现不是问题,相信自己的实现实力。。。。嗯嗯嗯

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 1000010 struct AA{
int id;
int v;
int num;
}a[N], stk[N]; bool cmpV(const AA &a, const AA &b) {
return a.v < b.v;
} int main(){
int n;
while (scanf("%d", &n) != EOF) {
for (int i = ; i < n; i++) {
scanf("%d", &a[i].v);
a[i].num = ;
}
int top = ;
stk[top++] = a[];
for (int i = ; i < n; i++) {
if (stk[top-].v == a[i].v) stk[top-].num++;
else stk[top++] = a[i];
}
if (top> && stk[top-].v == stk[].v) {
stk[].num += stk[top-].num;
top--;
}
for (int i = ; i < top; i++) {
stk[i].id = i;
a[i] = stk[i];
}
sort(stk, stk+top, cmpV);
for (int i = ; i < top; i++) {
int id2 = stk[i].id;
int id1 = (id2-+top)%top;
int id3 = (id2+)%top;
if (a[id1].v > a[id2].v && a[id2].v > a[id3].v) {
a[id2].v = a[id3].v+;
} else if (a[id1].v < a[id2].v && a[id2].v < a[id3].v) {
a[id2].v = a[id1].v+;
} else if (a[id1].v < a[id2].v && a[id2].v > a[id3].v) {
a[id2].v = max(a[id1].v,a[id3].v)+;
} else if (a[id1].v > a[id2].v && a[id2].v < a[id3].v) {
a[id2].v = ;
}
} long long ans = ;
for (int i = ; i < top; i++) {
ans += a[i].v*1ll*a[i].num;
}
printf("%lld\n", ans);
}
return ;
}

HRBUST 2078:糖果(模拟,贪心)的更多相关文章

  1. 2018.11.07 NOIP模拟 分糖果(贪心)

    传送门 考虑 n = 2 时的情况:假定两个人分别为(a, b),(c, d),则当且仅当min(a,d) ≤ min(b,c)时,把(a, b)放在前面更优,否则把(c, d)放在前面更优 然后把n ...

  2. BZOJ1029: [JSOI2007]建筑抢修[模拟 贪心 优先队列]

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 3785  Solved: 1747[Submit][Statu ...

  3. Codeforces Round #375 (Div. 2) A B C 水 模拟 贪心

    A. The New Year: Meeting Friends time limit per test 1 second memory limit per test 256 megabytes in ...

  4. Codeforces 452D [模拟][贪心]

    题意: 给你k件衣服处理,告诉你洗衣机烘干机折叠机的数量,和它们处理一件衣服的时间,要求一件衣服在洗完之后必须立刻烘干,烘干之后必须立刻折叠,问所需的最小时间. 思路: 1.按照时间模拟 2.若洗完的 ...

  5. HDU 1034(传递糖果 模拟)

    题意是一群孩子围成一个圈,每个人把手中的糖果分一半给右边的人,若分过之后手中的糖果数是奇数,则由老师提供一颗糖果给他,问这样传递多少圈所有人的糖果数都能相等,最终每人手里的糖果数是多少. 由于题中已经 ...

  6. 【BZOJ1045】[HAOI2008] 糖果传递 贪心

    [BZOJ1045][HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正 ...

  7. bzoj 2457 [BeiJing2011]双端队列 模拟+贪心

    [BeiJing2011]双端队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 457  Solved: 203[Submit][Status][D ...

  8. bzoj 3671: [Noi2014]随机数生成器【模拟+贪心】

    降智好题 前面随机部分按照题意模拟,然后字典序贪心,也就是记录每个值的位置从1~nm依次看能不能取,能取的话更新行的取值范围(它上面的行一定取的列小于等于这个数取的列,下面行大于等于) #includ ...

  9. ZOJ 3829 模拟贪心

    2014牡丹江现场赛水题 给出波兰式,推断其是否合法.假设不合法有两种操作: 1:任何位置加一个数字或者操作符 2:随意两个位置的元素对调 贪心模拟就可以 先推断数字数是否大于操作符数,若不大于 an ...

随机推荐

  1. HTTP-常用配置

    前言 这篇主要介绍HTTP服务程序环境 可能有一些介绍不到,博主能力有限,欢迎大神来纠正改进 HTTP协议从http/0.9到如今的http/2.0中间发生了很大的改变,现在主流的事http/1.1 ...

  2. centos7安装pgsql及操作命令

    1.下载所需要的数据库版本https://yum.postgresql.org/repopackages.php 2.安装数据库版本包 yum install -y https://download. ...

  3. 【mysql】【windows】MySQL 服务无法启动,服务没有报告任何错误,请键入 NET HELPMSG 3534 以获得更多的帮助。

    成功安装以后,启动MySQL,输入: net start mysql 提示: ”MySQL 服务无法启动,服务没有报告任何错误,请键入 NET HELPMSG 3534 以获得更多的帮助.” 查了下, ...

  4. css制作三角形,下拉框三角形

    网站制作中常常需要下拉框,而如果下拉框如果只是单纯的矩形则会显得太过单调,所以这次教大家利用css制作三角形放在矩形上面 首先利用css制作三角形 div { width:0px; height:0p ...

  5. LeetCode(164)Maximum Gap

    题目 Given an unsorted array, find the maximum difference between the successive elements in its sorte ...

  6. Hadoop4.2HDFS测试报告之三

    第一组:文件存储写过程记录 NameNode:1 DataNode:1 本地存储 scp localpath romotepath 500 2 1 23.67 NameNode:1 DataNode: ...

  7. 重新造轮子之静态链接1(Static linking)

    最近学习计算机病毒学的过程中,又讲到了静态链接的问题,联想到了之前保健哥在信息安全的课堂上向我们展示了一个没有main()函数的C程序到底应该如何编写.个人觉得这个小实验对于加深静态链接的过程的理解也 ...

  8. virtual 三种用法

    virtual用法一 #include using namespace std;class A{public:     virtual  void  display(){  cout<<& ...

  9. 深入浅出理解Javascript原型概念以及继承机制(转)

    在Javascript语言中,原型是一个经常被讨论到但是有非常让初学者不解的概念.那么,到底该怎么去给原型定义呢?不急,在了解是什么之前,我们不妨先来看下为什么. Javascript最开始是网景公司 ...

  10. TOJ2712: Atlantis

    小数据求面积并 There are several ancient Greek texts that contain descriptions of the fabled island Atlanti ...