目录
一、题目
1、题目描述
2、输入输出
2.1输入
2.2输出
3、原题链接
二、解题报告
1、思路分析
车站有多少颗糖,火车就要经过站点多少次
最后一次经过时,我们应该送的是目标站点顺时针最接近该站点的糖
那么在站点固定的情况下,我们计算每个站点送完糖所需花费,最大值就是答案
注意火车顺时针跑,起点第一次到达每个站点的花费取决于顺时针距离
2、复杂度
时间复杂度: O(n^2)空间复杂度:O(n)
3、代码详解
#include <bits/stdc++.h>
const int N = 5010, M = 20010;
int n, m;
int sz[N], mi[N];
int main(){
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> n >> m;
std::memset(mi, 0x3f, sizeof mi);
for(int i = 1, a, b; i <= m; i ++) {
std::cin >> a >> b;
sz[a] ++;
mi[a] = std::min(mi[a], (b + n - a) % n);
}
for(int i = 1; i <= n; i++){
int res = 0;
for(int j = 1; j <= n; j ++){
if(!sz[j]) continue;
res = std::max(res, (sz[j] - 1) * n + mi[j] + (j + n - i) % n);
}
std::cout << res << ' ';
}
return 0;
}