题意思路:

先输入当前每个人所有的发送次数,并且纪录下当前位置。

判断 :第一个人的发送次数是否为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;
}