#include <iostream> #include <vector> #include <algorithm> using namespace std; struct delivery { int place; int startTime; int accidents = 0; vector<int> accidentsWith; }; int main() { int n; cin >> n; vector <delivery> d1, d2; int cancelledDeliveries = 0; for (int i = 0; i < n; i++) { int type, place, startTime; cin >> type >> place >> startTime; if (type == 1) { d1.push_back({ place, startTime }); } else { d2.push_back({ place, startTime }); } } bool fine = false; // flaga while (!fine) { fine = true; int maxAccidents = -1; int maxAccidentsIndex; int maxAccidentsType; for (int i = 0; i < d1.size(); i++) { for (int j = 0; j < d2.size(); j++) { if (d1[i].place + d2[j].startTime == d2[j].place + d1[i].startTime) { //cout << "Wypadek! (" << d1[i].place << ", " << d2[j].place << ")" << endl; d1[i].accidents++; d2[j].accidents++; fine = false; if (d1[i].accidents > maxAccidents) { maxAccidents = d1[i].accidents; maxAccidentsIndex = i; maxAccidentsType = 1; } else if (d2[j].accidents > maxAccidents) { maxAccidents = d2[j].accidents; maxAccidentsIndex = j; maxAccidentsType = 2; } } } } if (maxAccidents != -1) { if (maxAccidentsType == 1) { //cout << "Usunieto: " << d1[maxAccidentsIndex].place << " " << d1[maxAccidentsIndex].startTime << endl; d1.erase(d1.begin() + maxAccidentsIndex); } else { //cout << "Usunieto: " << d2[maxAccidentsIndex].place << " " << d2[maxAccidentsIndex].startTime << endl; d2.erase(d2.begin() + maxAccidentsIndex); } cancelledDeliveries++; } } cout << cancelledDeliveries; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <iostream> #include <vector> #include <algorithm> using namespace std; struct delivery { int place; int startTime; int accidents = 0; vector<int> accidentsWith; }; int main() { int n; cin >> n; vector <delivery> d1, d2; int cancelledDeliveries = 0; for (int i = 0; i < n; i++) { int type, place, startTime; cin >> type >> place >> startTime; if (type == 1) { d1.push_back({ place, startTime }); } else { d2.push_back({ place, startTime }); } } bool fine = false; // flaga while (!fine) { fine = true; int maxAccidents = -1; int maxAccidentsIndex; int maxAccidentsType; for (int i = 0; i < d1.size(); i++) { for (int j = 0; j < d2.size(); j++) { if (d1[i].place + d2[j].startTime == d2[j].place + d1[i].startTime) { //cout << "Wypadek! (" << d1[i].place << ", " << d2[j].place << ")" << endl; d1[i].accidents++; d2[j].accidents++; fine = false; if (d1[i].accidents > maxAccidents) { maxAccidents = d1[i].accidents; maxAccidentsIndex = i; maxAccidentsType = 1; } else if (d2[j].accidents > maxAccidents) { maxAccidents = d2[j].accidents; maxAccidentsIndex = j; maxAccidentsType = 2; } } } } if (maxAccidents != -1) { if (maxAccidentsType == 1) { //cout << "Usunieto: " << d1[maxAccidentsIndex].place << " " << d1[maxAccidentsIndex].startTime << endl; d1.erase(d1.begin() + maxAccidentsIndex); } else { //cout << "Usunieto: " << d2[maxAccidentsIndex].place << " " << d2[maxAccidentsIndex].startTime << endl; d2.erase(d2.begin() + maxAccidentsIndex); } cancelledDeliveries++; } } cout << cancelledDeliveries; } |