【题意】:圆形球场有n个门,Allen想要进去看比赛。Allen采取以下方案进入球场:开始Allen站在第一个门,如果当前门前面有人Allen会花费单位时间走到下一个门,如果没人Allen从这个门就进去了。球场的每个门,每单位时间可以进去一个人。问Allen最终是从哪个门进入球场的?
【分析】:我们可以发现是有规律的。我们假设第i个门有a个人,Allen第x圈可以从此进入,那么有:x∗n+i=a→x=abs(a−i)/n,所以第一个最小圈数进入的那个门就是答案。
【代码】:
#include using namespace std;const int MAXN = 1e5+5;const int INF = 0x3f3f3f3f;int n, ans;int main(){ scanf("%d", &n); int MIN = INF; for (int i = 1; i <= n; i++) { int a; scanf("%d", &a); if(MIN > (a-i+n)/n)//x*n+i=a =》x=abs(a-i)/n { MIN = (a-i+n)/n; ans = i; } } printf("%d\n", ans); return 0;}