Pagini recente » Cod sursa (job #532500) | Monitorul de evaluare | Cod sursa (job #2550605) | Cod sursa (job #651161) | Cod sursa (job #2123658)
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int n;
int x[105], y[105], pos[105];
int w[105], k[105];
inline bool cmp1(int i, int j){
return x[i] < x[j];
}
inline bool cmp2(int i, int j){
return y[i] < y[j];
}
priority_queue <pair <int, int> > pq;
int main()
{
freopen("harta.in", "r", stdin);
freopen("harta.out", "w", stdout);
scanf("%d", &n);
int Sol = 0;
for(int i = 1; i <= n ; ++i){
scanf("%d%d", &x[i], &y[i]);
Sol += x[i];
pos[i] = i;
pq.push({y[i], i});
}
printf("%d\n", Sol);
sort(pos + 1, pos + n + 1, cmp1);
for(int i = 1; i <= n ; ++i){
int NR = 0;
while(x[pos[i]] > 0){
int nr = pq.top().first, nod = pq.top().second;
pq.pop();
if(nr > 1){
w[++NR] = nod;
k[NR] = nr - 1;
}
if(nod == pos[i]) continue ;
--x[pos[i]];
printf("%d %d\n", pos[i], nod);
}
for(int i = 1; i <= NR ; ++i)
pq.push({k[i], w[i]});
}
return 0;
}