题意:小明去看世界杯,有n条入口形成一个环,每条入口有ai个人排队进场,小明首先排在第一条队伍的最后面,每个入口每分钟可以进入1个人,小明是个闲不住的人,如果这一分钟不是小明进场的话,他就会移动到下一队的队尾(没有后续的人来排队)。问小明最后是在几号入口进入球场的。
思路:求出小明从每个入口进入需要的时间,然后取最小的,mod 入口的个数,就是答案了。(很容易就想到,入场的时间,其实就是小明移动的步数,只有当小明刚好移动到这个入口,并且这个入口排队的人数为0,小明才可以进入,由于入口是形成一个环的,步数mod入口数就是小明入场的入口编号了)注意,这里需要用到long long
#include "iostream"
using namespace std;
typedef long long ll;
const int Max=1e5+10;
const int inf=1e18;
int a[Max];
int main()
{
ios::sync_with_stdio(false);
int n;
ll t,ans=inf,x;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i];
if(i-1>=a[i]) {ans=i;break;}//如果到这个入口,人数已经为0,直接进入
else{//求出步数
x=(a[i]-(i-1))%n?((a[i]-(i-1))/n)+1:((a[i]-(i-1))/n);
t=x*n+i;
}
ans=ans<t?ans:t;//更新最小步数
}
ans%=n;
if(ans==0) ans=n;
cout<<ans<<endl;
return 0;
}