题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=2401
题目讲解:
哇,这题有点复杂,我们先用公式求出比赛的状况,再一步一步算分数,见代码:
#include <iostream> #include <cstring> using namespace std; int team[101],n,x,s[101],l = 1,lt; int main(){ memset(s,0,sizeof(s)); cin >> n >> x; team[1] = x; for (int i = 2;i <= n;i++) team[i] = (team[i-1] * 3703 + 1047) % n + 1; lt = team[1]; for (int i = 1;i <= n;i++){ if (team[i] == lt){ if (l != 3 && i != 1) l++; // 连胜 + 1 } else{ lt = team[i]; // 连胜断开,换队伍 l = 1; // 连胜重计 } s[lt] += l; // 加分 } int maxn = -1; for (int i = 1;i <= n;i++) maxn = max(maxn,s[i]); cout << maxn; return 0; }
原文:https://www.cnblogs.com/linyiweiblog/p/14826367.html