【链接】 我是链接,点我呀:)

【题意】

【题解】

你可以找出来a[i]里面的最小值mi,显然是这个数字最可能先变成0,但还不确定.
然后用mi/n得到你最少需要走多少圈才能让那个mi变成"只差一圈"就变成0.
那么把所有的a[i]都减去mi/n*n
然后再手动地模拟一圈(显然再模拟一圈就能让某个a[i]变成0了,即让那个mi变成0
但是有例外
比如说
6 5 7 8 9 10
这6个数字
mi=5
5/6=0
所以一开始a[i]不用减去任何数字.
但是你第一次遇到5的时候,5只变成了4.还没有变成0.
所以还得再模拟一圈.
这种情况,就模拟两圈就ok了。
综上,模拟两圈一定能得到a[i]=0的.

【代码】

#include <bits/stdc++.h>
#define rep1(i,a,b) for (int i = a;i <= b;i++) using namespace std; const int N = 1e5; int n;
int a[N+10],mi; int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin >> n;
rep1(i,1,n) cin >> a[i];
mi = a[1];rep1(i,1,n) mi = min(mi,a[i]);
int quan = mi/n;
rep1(i,1,n) a[i] -= quan*n;
int past = 0;
rep1(i,1,n){
if (a[i]-past<=0){
cout<<i<<endl;
return 0;
}
past++;
} rep1(i,1,n){
if (a[i]-past<=0){
cout<<i<<endl;
return 0;
}
past++;
}
return 0;
}
05-26 08:51