题意:有n支队伍,一张桌子有m个座位顺时针编号1~m。p个预言。预言a队伍在b时刻ac一道题目。机器人每个时刻都顺时针走一步,有需要气球的就发。每支队伍,ac后多少时刻没收到气球就有多少不开心的值,问机器人起始位置在哪里可以使得总的不高兴值最小。输出最小的不高兴值。
假设机器人在第
1
个位置,那么位置
这样做的时间复杂度只有 O(n) 。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=100000+10;
int T;
ll n,m,p;
ll pos[maxn],d[maxn];
ll sum=0;
void init(){
sum=0;
}
int main(){
// freopen("1.txt","r",stdin);
scanf("%d",&T);
while (T--){
init();
scanf("%lld %lld %lld",&n,&m,&p);
for (int i=1;i<=n;i++) scanf("%lld",&pos[i]);
for (int i=1;i<=p;i++){
ll x,y;
scanf("%lld %lld",&x,&y);
d[i]=(pos[x]-1-y%m+m)%m;
sum+=d[i];
}
sort(d+1,d+p+1);
ll ans=(ll)1e19;
for (int i=1;i<=p;i++){
if (i==1||d[i]!=d[i-1]){
ans=min(ans,sum-d[i]*p+(i-1)*m);
}
}
printf("%lld\n",ans);
}
}