空闲链表法的那道题
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct MDvoid {
int MD1;
int void_size;
int pp = 1;
};
int main() {
int n;
cin >> n;
vector<MDvoid> MD;
MDvoid MM;
for (int i = 0; i < n; i++) {
cin >> MM.MD1 >> MM.void_size;
MD.push_back(MM);
}
int shengyu = n;
int acc[101];
int k = 0;
int now_p = 0;
while (~scanf("%d", &acc[k])&&acc[k]!=-1) {
k++;
}
for (int i = 0; i < k; i++) {
int bestsize = 1000000;
int bestacc = 0;
for (int j = now_p;j<n;j++) {
if (MD[j].void_size >= acc[i]&&bestsize> MD[j].void_size&& MD[j].pp!=0) {
bestsize = MD[j].void_size;
bestacc = j;
}
}
for (int j = 0; j < now_p; j++) {
if (MD[j].void_size >= acc[i] && bestsize > MD[j].void_size) {
bestsize = MD[j].void_size;
bestacc = j;
}
}
if (bestsize == 1000000) {
continue;
}
else if (bestsize - acc[i] == 0) {
now_p = (bestacc+1)%n;
MD[bestacc].pp = 0;
}
else {
MD[bestacc].void_size -= acc[i];
now_p = bestacc;
}
}
for (int j = now_p; j < n; j++) {
if (MD[j].pp == 1) {
cout << MD[j].MD1 << " " << MD[j].void_size << endl;
}
}
for (int j = 0; j < now_p; j++) {
if (MD[j].pp == 1) {
cout << MD[j].MD1 << " " << MD[j].void_size << endl;
}
}
return 0;
}