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 綠帽自動機 思維題