Submission #222729

#TimeUsernameProblemLanguageResultExecution timeMemory
222729kingfran1907Drvca (COCI19_drvca)C++14
110 / 110
109 ms6900 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5+10; int n; int niz[maxn]; vector<int> a; multiset<int> b; map<int, int> m; void print() { printf("%d\n", a.size()); for (int i = 0; i < a.size(); i++) printf("%d ", a[i]); printf("\n%d\n", b.size()); for (auto iter = b.begin(); iter != b.end(); iter++) printf("%d ", *iter); printf("\n"); } void print_deb() { printf("a: "); for (int i = 0; i < a.size(); i++) printf("%d ", a[i]); printf("\nb: "); for (auto iter = b.begin(); iter != b.end(); iter++) printf("%d ", *iter); printf("\nm: "); for (auto iter = m.begin(); iter != m.end(); iter++) printf("(%d, %d) ", iter->first, iter->second); printf("\n\n"); } void check(int x, int y) { a.clear(); b.clear(); m.clear(); int dif = niz[y] - niz[x]; a.push_back(niz[x]); a.push_back(niz[y]); int last = -1; for (int i = 0; i < n; i++) { if (i == x || i == y) continue; if (niz[i] == a.back() + dif) a.push_back(niz[i]); else { b.insert(niz[i]); if (last != -1) m[niz[i] - last]++; last = niz[i]; } } if (m.size() == 1) { print(); exit(0); } //print_deb(); while (!a.empty()) { int tren = a.back(); int pref, nex; auto iter = b.lower_bound(tren); if (iter == b.begin()) pref = -1; else pref = *(--iter), iter++; if (iter == b.end()) nex = -1; else nex = *iter; if (pref != -1) m[tren - pref]++; if (nex != -1) m[nex - tren]++; if (pref != -1 && nex != -1) { //printf("retard: %d %d -> %d\n", nex, pref, nex - pref); m[nex - pref]--; if (m[nex - pref] == 0) m.erase(nex - pref); } a.pop_back(); b.insert(tren); //printf("prev, nex: %d, %d\n", pref, nex); //print_deb(); if (m.size() == 1) { print(); exit(0); } } } int main() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", niz+i); sort(niz, niz+n); if (n < 5) { printf("%d\n", n / 2); for (int i = 0; i < n / 2; i++) printf("%d ", niz[i]); printf("\n%d\n", n - n / 2); for (int i = 0; i < n - n / 2; i++) printf("%d ", niz[n / 2 + i]); printf("\n"); return 0; } check(0, 1); check(0, 2); check(1, 2); printf("-1\n"); return 0; }

Compilation message (stderr)

drvca.cpp: In function 'void print()':
drvca.cpp:13:28: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type {aka long unsigned int}' [-Wformat=]
     printf("%d\n", a.size());
                    ~~~~~~~~^
drvca.cpp:14:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < a.size(); i++)
                     ~~^~~~~~~~~~
drvca.cpp:17:30: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::multiset<int>::size_type {aka long unsigned int}' [-Wformat=]
     printf("\n%d\n", b.size());
                      ~~~~~~~~^
drvca.cpp: In function 'void print_deb()':
drvca.cpp:25:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < a.size(); i++)
                     ~~^~~~~~~~~~
drvca.cpp: In function 'int main()':
drvca.cpp:95:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n);
     ~~~~~^~~~~~~~~~
drvca.cpp:97:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", niz+i);
         ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...