标签:ima ++i show ges and htm 多少 log des
题目链接:http://acm.uestc.edu.cn/#/problem/show/1803
绿人无数的绿帽侠决定金盆洗手啦!
由于绿帽侠后继无人,按照祖祖辈辈的祖训,绿帽侠要把位置传给这个王国里绿帽最少的那个人。
但是,绿帽侠曾记得那个被绿的晚上,而那个人,还在王国里潇潇洒洒。
“当然是选择 不 原谅他啊!”
于是绿帽侠搬出了祖辈流传的神器:绿帽自动机——对着一个人喊一声,“你将加冕为王”,除了他以外的所有人,都被戴上一顶绿帽。
绿帽侠决定金盆洗手前,再干一票!
不为别的,就为了让当初曾经绿了他的人成为这个王国内唯一的绿帽最多的人!
“屏幕前的你,如果不想被我戴上绿帽的话,就帮我算算,我最少需要喊多少次吧。这条咸鱼还没熟,我要再烤烤。”
第一行两个整数\(n,x(2≤n≤100000,1≤x≤n)\),表示这个王国有\(n\)个人,绿帽侠希望第\(x\)个人绿帽最多。
第二行包括\(n\)个整数,用空格隔开,第\(i\)个整数\(g_i\)表示第\(i\)个人头上有\(g_i\)顶绿帽。\((0≤g_i≤10000)\)
输出一个整数\(a\),表示绿帽侠最少需要喊\(a\)次“你将加冕为王”。
Sample Input | Sample Output |
---|---|
5 3 1 1 3 4 4 |
4 |
4 2 0 3 2 1 |
0 |
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
标签:ima ++i show ges and htm 多少 log des
原文地址:http://www.cnblogs.com/scidylanpno/p/7977838.html