题意:小明去看世界杯,有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; }