题意思路:
先输入当前每个人所有的发送次数,并且纪录下当前位置。
判断 :第一个人的发送次数是否为0, 以及所有发送次数是否为小于人数,是的话直接输出打印-1.
当第二个到第n个的人根据发送次数从小到大进行排序,最近进行循环遍历打印发送的过程
AC代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
pair <int, int> a[1000];
int n;
cin >> n;
int s = 0;
for (int i = 0; i < n; i++) {
cin>>a[i].first;
s+=a[i].first;
a[i].second=i;
}
if(a[0].first==0 || s<n-1) {
cout<<-1;
return 0;
}
sort(a+1,a+n);
reverse(a+1,a+n);
cout<<n-1<<endl;
int i0=0;
for (int i=1;i<n;i++) {
cout<<a[i0].second+1<<" "<<a[i].second+1<<endl;
a[i0].first--;
if(a[i0].first==0)
i0++;
}
return 0;
}