我写的是纯模拟,写完后各种调bug,满满的都是泪...
代码如下:
#include <bits/stdc++.h>
#define MAXN 1000000
using namespace std;
int res[MAXN];
struct P {
int x, y;
}a[MAXN];
bool cmp(P a, P b) {
return a.y < b.y;
}
int main(void) {
int n, k, cnt, step, ans, flag;
scanf("%d%d", &n, &k);
for(int i=0; i<n; ++i) {
a[i].x = i+1;
scanf("%d", &a[i].y);
}
step = cnt = 0;
ans = MAXN;
sort(a, a+n, cmp);
ans = a[n-1].y-a[0].y;
while(step < k) {
sort(a, a+n, cmp);
if(a[n-1].y-a[0].y<=1) {
ans = min(ans, a[n-1].y-a[0].y);
break;
}
else {
ans = a[n-1].y-a[0].y;
res[cnt++] = a[n-1].x;
res[cnt++] = a[0].x;
}
--a[n-1].y;
++a[0].y;
++step;
}
sort(a, a+n, cmp);
ans = min(ans, a[n-1].y-a[0].y);
printf("%d %d\n", ans, step);
for(int i=0; i<step*2; i+=2) {
printf("%d %d\n", res[i], res[i+1]);
}
return 0;
}