这道题的题意比较调皮,附上OJ链接:红帽自动机
简述题意
红帽侠对着n个人中的第k个人吼“你将加冕为王”后,除了第k个人的其余所有人都戴上一顶红帽,现在希望第x个人戴上的红帽数量最多,请问:至少需要喊多少次?
这道题让我联想到硬币翻转问题,但是直观来讲,硬币翻转问题需要关注过程,而这道题,我们只需要关注数量大小的比较及其结果
附上硬币翻转问题的题解:硬币翻转问题
"加冕为王"的题解如下:
#include<bits/stdc++.h>
#define N 100001
using namespace std;
int main(){
int n,x,a[N],i,cnt=0;
cin>>n>>x;
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n;i++){
if(i==x) continue;
if(a[i]>=a[x]) cnt=cnt+a[i]-a[x]+1;//找到数量更大的就去追赶
}
cout<<cnt<<endl;
return 0;
}