CDOJ 1803 绿帽自动机 思维题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CDOJ 1803 绿帽自动机 思维题相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.uestc.edu.cn/#/problem/show/1803

Description

绿人无数的绿帽侠决定金盆洗手啦!
由于绿帽侠后继无人,按照祖祖辈辈的祖训,绿帽侠要把位置传给这个王国里绿帽最少的那个人。
但是,绿帽侠曾记得那个被绿的晚上,而那个人,还在王国里潇潇洒洒。
“当然是选择 不 原谅他啊!”
于是绿帽侠搬出了祖辈流传的神器:绿帽自动机——对着一个人喊一声,“你将加冕为王”,除了他以外的所有人,都被戴上一顶绿帽。
绿帽侠决定金盆洗手前,再干一票!
不为别的,就为了让当初曾经绿了他的人成为这个王国内唯一的绿帽最多的人!
“屏幕前的你,如果不想被我戴上绿帽的话,就帮我算算,我最少需要喊多少次吧。这条咸鱼还没熟,我要再烤烤。”
技术分享图片

Input

第一行两个整数\\(n,x(2≤n≤100000,1≤x≤n)\\),表示这个王国有\\(n\\)个人,绿帽侠希望第\\(x\\)个人绿帽最多。
第二行包括\\(n\\)个整数,用空格隔开,第\\(i\\)个整数\\(g_i\\)表示第\\(i\\)个人头上有\\(g_i\\)顶绿帽。\\((0≤g_i≤10000)\\)

Output

输出一个整数\\(a\\),表示绿帽侠最少需要喊\\(a\\)次“你将加冕为王”。

Sample Input and Output

Sample Input Sample Output
5 3
1 1 3 4 4
4
4 2
0 3 2 1
0

Hint

Sample 1:
第1次,对第4人喊“你将加冕为王”,整体绿帽变为 [ 2 2 4 4 5 ]
第2次,对第5人喊“你将加冕为王”,整体绿帽变为 [ 3 3 5 5 5 ]
第3次,对第4人喊“你将加冕为王”,整体绿帽变为 [ 4 4 6 5 6 ]
第4次,对第5人喊“你将加冕为王”,整体绿帽变为 [ 5 5 7 6 6 ]
此时,第3人绿帽最多。
可以证明,至少需要4次。
Sample 2:
第2人绿帽最多,不需喊。


题意

给定\\(n\\)个数\\(g_i\\),每次进行操作:指定\\(b\\),除\\(b\\)外所有\\(g_i\\)+1
求至少需要多少次可以使\\(g_x\\)最大

题解

操作可以分成两步:
1、所有\\(g_i\\)+1
2、\\(g_b\\)-1
显然第1步不会影响所有数之间的大小关系,只有第2步会,那么就数所有比\\(g_x\\)大的那些数比\\(g_x-1\\)大多少就好了,毕竟比\\(g_x-1\\)大的都得减去=-=

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100000+10;
int g[MAXN];
int sum;
int main()
{
    int n,x;
    cin>>n>>x;
    for(int i=1;i<=n;++i)   cin>>g[i];
    for(int i=1;i<=n;++i)   if(g[i]>=g[x])  sum+=(g[i]-g[x]+1);
    cout<<sum-1;
    return 0;
}

出题人是条咸鱼=-=


版权所有:scidylanpno
原文链接:http://www.cnblogs.com/scidylanpno/p/7977838.html

























以上是关于CDOJ 1803 绿帽自动机 思维题的主要内容,如果未能解决你的问题,请参考以下文章

CDOJ 3 BiliBili, ACFun… And More! 解题报告

poj2243前一道题升级(思维构造+ac自动机)

小说脑洞:《绿帽侠》

CDOJ 1221 Ancient Go

线段树模板 CDOJ1057

绿得发慌?最强 IDE VS2019 修复“绿帽子”问题