【Codeforces 996B】World Cup
【链接】 我是链接,点我呀:)
【题意】
【题解】
你可以找出来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;
}