#include <bits/stdc++.h>
#define int long long
#pragma GCC diagnostic ignored "-Wunused-result"
#define len(v) (int)(v.size())
using namespace std;
typedef pair<int, int> pii;
const int maxVerrous = 1000*1000;
int nbVerrous, tailleOperation;
int reqUnlock[maxVerrous];
int cur[maxVerrous];
struct Machin
{
int req, ind;
bool operator< (Machin oth) const
{
int c1 = reqUnlock[ind] - cur[ind];
int c2 = reqUnlock[oth.ind] - cur[oth.ind];
if (c1 != c2) return c1 < c2;
else return ind < oth.ind;
}
};
vector<Machin> tab;
set<Machin> wcur;
signed main()
{
scanf("%lld%lld", &nbVerrous, &tailleOperation);
tab.resize(nbVerrous);
for (int indVerrou = 0; indVerrou < nbVerrous; ++indVerrou) {
scanf("%lld", &reqUnlock[indVerrou]);
tab[indVerrou] = {reqUnlock[indVerrou], indVerrou};
}
sort(tab.begin(), tab.end());
vector<vector<int>> operations;
operations.reserve(100*1000);
vector<int> curOp(tailleOperation + 1);
int indOp = 0;
while ((! tab.empty()) || (! wcur.empty())) {
++indOp;
if (indOp * tailleOperation > 3*1000*1000 || len(tab) + len(wcur) < tailleOperation) {
printf("-1\n");
return 0;
}
while (len(wcur) < tailleOperation) {
wcur.insert(tab.back());
tab.pop_back();
}
auto it = wcur.begin();
int rem = reqUnlock[it->ind] - cur[it->ind];
curOp[0] = rem;
for (int ind = 1; ind <= tailleOperation; ++ind) {
curOp[ind] = it->ind + 1;
cur[it->ind] += rem;
++it;
}
operations.push_back(curOp);
while ((! wcur.empty()) && (reqUnlock[wcur.begin()->ind] == cur[wcur.begin()->ind])) {
wcur.erase(wcur.begin());
}
}
printf("%lld\n", (int)(operations.size()));
for (auto op : operations) {
for (int choisi : op) {
printf("%lld ", choisi);
}
printf("\n");
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
376 KB |
n=4 |
2 |
Correct |
2 ms |
376 KB |
n=3 |
3 |
Correct |
2 ms |
540 KB |
n=3 |
4 |
Correct |
3 ms |
540 KB |
n=4 |
5 |
Correct |
3 ms |
540 KB |
n=4 |
6 |
Correct |
2 ms |
556 KB |
n=2 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
376 KB |
n=4 |
2 |
Correct |
2 ms |
376 KB |
n=3 |
3 |
Correct |
2 ms |
540 KB |
n=3 |
4 |
Correct |
3 ms |
540 KB |
n=4 |
5 |
Correct |
3 ms |
540 KB |
n=4 |
6 |
Correct |
2 ms |
556 KB |
n=2 |
7 |
Correct |
2 ms |
556 KB |
n=5 |
8 |
Correct |
3 ms |
556 KB |
n=8 |
9 |
Incorrect |
3 ms |
620 KB |
Jury has the answer but participant has not |
10 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
376 KB |
n=4 |
2 |
Correct |
2 ms |
376 KB |
n=3 |
3 |
Correct |
2 ms |
540 KB |
n=3 |
4 |
Correct |
3 ms |
540 KB |
n=4 |
5 |
Correct |
3 ms |
540 KB |
n=4 |
6 |
Correct |
2 ms |
556 KB |
n=2 |
7 |
Correct |
2 ms |
556 KB |
n=5 |
8 |
Correct |
3 ms |
556 KB |
n=8 |
9 |
Incorrect |
3 ms |
620 KB |
Jury has the answer but participant has not |
10 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
774 ms |
73532 KB |
n=1000000 |
2 |
Correct |
404 ms |
73532 KB |
n=666666 |
3 |
Correct |
222 ms |
73532 KB |
n=400000 |
4 |
Incorrect |
112 ms |
73532 KB |
Jury has the answer but participant has not |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
376 KB |
n=4 |
2 |
Correct |
2 ms |
376 KB |
n=3 |
3 |
Correct |
2 ms |
540 KB |
n=3 |
4 |
Correct |
3 ms |
540 KB |
n=4 |
5 |
Correct |
3 ms |
540 KB |
n=4 |
6 |
Correct |
2 ms |
556 KB |
n=2 |
7 |
Correct |
2 ms |
556 KB |
n=5 |
8 |
Correct |
3 ms |
556 KB |
n=8 |
9 |
Incorrect |
3 ms |
620 KB |
Jury has the answer but participant has not |
10 |
Halted |
0 ms |
0 KB |
- |