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 绿帽自动机 思维题的主要内容,如果未能解决你的问题,请参考以下文章