✅ (wip) P7078 15pts (WA+TLE)
This commit is contained in:
parent
318c907321
commit
783cd3980a
@ -22,4 +22,5 @@ add_executable(Playground
|
||||
sudoku/main.cc
|
||||
take-most-space-element/main.cc
|
||||
walking-in-maze/main.cc
|
||||
network-connection/main.cpp)
|
||||
network-connection/main.cpp
|
||||
eating-snake/main.cc)
|
||||
|
5
eating-snake/data.in
Normal file
5
eating-snake/data.in
Normal file
@ -0,0 +1,5 @@
|
||||
2
|
||||
3
|
||||
11 14 14
|
||||
3
|
||||
1 5 2 6 3 25
|
5
eating-snake/data2.in
Normal file
5
eating-snake/data2.in
Normal file
@ -0,0 +1,5 @@
|
||||
2
|
||||
5
|
||||
13 31 33 39 42
|
||||
5
|
||||
1 7 2 10 3 24 4 48 5 50
|
21
eating-snake/data3.in
Normal file
21
eating-snake/data3.in
Normal file
@ -0,0 +1,21 @@
|
||||
10
|
||||
3
|
||||
29 46 67
|
||||
3
|
||||
1 15 2 34 3 114
|
||||
3
|
||||
1 120 2 168 3 224
|
||||
3
|
||||
1 65 2 132 3 293
|
||||
3
|
||||
1 79 2 192 3 474
|
||||
3
|
||||
1 24 2 64 3 562
|
||||
3
|
||||
1 396 2 458 3 595
|
||||
3
|
||||
1 44 2 317 3 592
|
||||
3
|
||||
1 138 2 145 3 572
|
||||
3
|
||||
1 602 2 726 3 831
|
144
eating-snake/data3.out
Normal file
144
eating-snake/data3.out
Normal file
@ -0,0 +1,144 @@
|
||||
eating log:
|
||||
(3, 67)
|
||||
eating log:
|
||||
(2, 46)
|
||||
eating log:
|
||||
(1, 29)
|
||||
3 gonna to eat 1
|
||||
3 give up, cuz it will be eaten after ate that snake, new strongest snake 2
|
||||
3
|
||||
alter log:
|
||||
1 2 3
|
||||
eating log:
|
||||
(3, 114)
|
||||
eating log:
|
||||
(2, 34)
|
||||
eating log:
|
||||
(1, 15)
|
||||
3 gonna to eat 1
|
||||
3 has ate 1
|
||||
eating log:
|
||||
(3, 99)
|
||||
eating log:
|
||||
(2, 34)
|
||||
3 gonna to eat 2
|
||||
3 has ate 2
|
||||
1
|
||||
alter log:
|
||||
3
|
||||
eating log:
|
||||
(3, 224)
|
||||
eating log:
|
||||
(2, 168)
|
||||
eating log:
|
||||
(3, 120)
|
||||
3 gonna to eat 3
|
||||
3 give up, cuz it will be eaten after ate that snake, new strongest snake 2
|
||||
3
|
||||
alter log:
|
||||
2 3 3
|
||||
eating log:
|
||||
(3, 293)
|
||||
eating log:
|
||||
(3, 132)
|
||||
eating log:
|
||||
(2, 65)
|
||||
3 gonna to eat 2
|
||||
3 has ate 2
|
||||
eating log:
|
||||
(3, 228)
|
||||
eating log:
|
||||
(3, 132)
|
||||
3 gonna to eat 3
|
||||
3 has ate 3
|
||||
1
|
||||
alter log:
|
||||
3
|
||||
eating log:
|
||||
(3, 474)
|
||||
eating log:
|
||||
(2, 192)
|
||||
eating log:
|
||||
(3, 79)
|
||||
3 gonna to eat 3
|
||||
3 has ate 3
|
||||
eating log:
|
||||
(3, 395)
|
||||
eating log:
|
||||
(2, 192)
|
||||
3 gonna to eat 2
|
||||
3 has ate 2
|
||||
1
|
||||
alter log:
|
||||
3
|
||||
eating log:
|
||||
(3, 562)
|
||||
eating log:
|
||||
(2, 64)
|
||||
eating log:
|
||||
(3, 24)
|
||||
3 gonna to eat 3
|
||||
3 has ate 3
|
||||
eating log:
|
||||
(3, 538)
|
||||
eating log:
|
||||
(2, 64)
|
||||
3 gonna to eat 2
|
||||
3 has ate 2
|
||||
1
|
||||
alter log:
|
||||
3
|
||||
eating log:
|
||||
(3, 595)
|
||||
eating log:
|
||||
(2, 458)
|
||||
eating log:
|
||||
(3, 396)
|
||||
3 gonna to eat 3
|
||||
3 give up, cuz it will be eaten after ate that snake, new strongest snake 2
|
||||
3
|
||||
alter log:
|
||||
2 3 3
|
||||
eating log:
|
||||
(3, 592)
|
||||
eating log:
|
||||
(3, 317)
|
||||
eating log:
|
||||
(2, 44)
|
||||
3 gonna to eat 2
|
||||
3 has ate 2
|
||||
eating log:
|
||||
(3, 548)
|
||||
eating log:
|
||||
(3, 317)
|
||||
3 gonna to eat 3
|
||||
3 has ate 3
|
||||
1
|
||||
alter log:
|
||||
3
|
||||
eating log:
|
||||
(3, 572)
|
||||
eating log:
|
||||
(2, 145)
|
||||
eating log:
|
||||
(3, 138)
|
||||
3 gonna to eat 3
|
||||
3 has ate 3
|
||||
eating log:
|
||||
(3, 434)
|
||||
eating log:
|
||||
(2, 145)
|
||||
3 gonna to eat 2
|
||||
3 has ate 2
|
||||
1
|
||||
alter log:
|
||||
3
|
||||
eating log:
|
||||
(3, 831)
|
||||
eating log:
|
||||
(2, 726)
|
||||
eating log:
|
||||
(3, 602)
|
||||
3 gonna to eat 3
|
||||
3 give up, cuz it will be eaten after ate that snake, new strongest snake 2
|
||||
3
|
142
eating-snake/main.cc
Normal file
142
eating-snake/main.cc
Normal file
@ -0,0 +1,142 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
//#define ENABLE_LOG
|
||||
|
||||
struct snake {
|
||||
int id;
|
||||
int power;
|
||||
|
||||
snake(int id, int power) {
|
||||
this->id = id;
|
||||
this->power = power;
|
||||
}
|
||||
|
||||
bool operator<(const snake &obj) const {
|
||||
if (obj.power == power) return obj.id < id;
|
||||
return obj.power < power;
|
||||
}
|
||||
|
||||
bool operator>=(const snake &obj) const {
|
||||
return power >= obj.power;
|
||||
}
|
||||
};
|
||||
|
||||
bool sort_by_id(snake a, snake b) {
|
||||
return b.id > a.id;
|
||||
}
|
||||
|
||||
void eat(vector<snake> &vec, bool skip_sort = false) {
|
||||
if (vec.size() < 2) return;
|
||||
if (!skip_sort) {
|
||||
sort(vec.begin(), vec.end());
|
||||
}
|
||||
|
||||
#if defined(ENABLE_LOG)
|
||||
for (auto item: vec) {
|
||||
printf("eating log: \n");
|
||||
printf("(%d, %d)\n", item.id, item.power);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!(vec[0] >= vec[vec.size() - 1])) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If this snake ate the last snake
|
||||
snake curr = vec[0];
|
||||
snake last = vec[vec.size() - 1];
|
||||
#if defined(ENABLE_LOG)
|
||||
printf("%d gonna to eat %d\n", curr.id, last.id);
|
||||
#endif
|
||||
vec.pop_back();
|
||||
vec[0].power -= last.power;
|
||||
sort(vec.begin(), vec.end());
|
||||
if (vec[0].id != curr.id) {
|
||||
bool will_be_eaten = false;
|
||||
int strongest_curr_power = vec[0].power;
|
||||
// Looking up if current snake will be eaten
|
||||
for (auto it = vec.rbegin(); it < vec.rend(); it++) {
|
||||
if (strongest_curr_power >= it->power) {
|
||||
if (it->id == curr.id) {
|
||||
// So bad, the new strongest snake will eat the current strongest snake
|
||||
// Give up eating right now!
|
||||
will_be_eaten = true;
|
||||
break;
|
||||
}
|
||||
// No more thinking, just go for it
|
||||
strongest_curr_power -= it->power;
|
||||
}
|
||||
}
|
||||
|
||||
if (will_be_eaten) {
|
||||
#if defined(ENABLE_LOG)
|
||||
printf("%d give up, cuz it will be eaten after ate that snake, new strongest snake %d\n", curr.id,
|
||||
vec[0].id);
|
||||
#endif
|
||||
// It means the current snake going to be eaten
|
||||
// Revert the action
|
||||
for (auto &item: vec) {
|
||||
if (item.id == curr.id) {
|
||||
item.power = curr.power;
|
||||
break;
|
||||
}
|
||||
}
|
||||
vec.push_back(last);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(ENABLE_LOG)
|
||||
printf("%d has ate %d\n", curr.id, last.id);
|
||||
#endif
|
||||
// Else, it means the current snake is still strong enough
|
||||
// Going to see other snakes can be eaten...
|
||||
return eat(vec, skip_sort = true);
|
||||
}
|
||||
|
||||
int main() {
|
||||
int count;
|
||||
cin >> count;
|
||||
|
||||
vector<snake> snakes;
|
||||
int t;
|
||||
cin >> t;
|
||||
for (int i = 0; i < t; i++) {
|
||||
int a;
|
||||
cin >> a;
|
||||
snakes.emplace_back(i + 1, a);
|
||||
}
|
||||
|
||||
eat(snakes);
|
||||
cout << snakes.size() << endl;
|
||||
|
||||
for (int i = 0; i < count - 1; i++) {
|
||||
int n;
|
||||
cin >> n;
|
||||
sort(snakes.begin(), snakes.end(), sort_by_id);
|
||||
#if defined(ENABLE_LOG)
|
||||
printf("alter log: \n");
|
||||
for (const auto &item: snakes) {
|
||||
printf("%d ", item.id);
|
||||
}
|
||||
printf("\n");
|
||||
#endif
|
||||
for (int j = 0; j < n; j++) {
|
||||
int id, alter;
|
||||
cin >> id >> alter;
|
||||
if (snakes.size() < id) {
|
||||
// Respawn
|
||||
snakes.emplace_back(id, alter);
|
||||
} else {
|
||||
// Alter power
|
||||
snakes[id - 1].power = alter;
|
||||
}
|
||||
}
|
||||
eat(snakes);
|
||||
cout << snakes.size() << endl;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user