Submission #119437

#TimeUsernameProblemLanguageResultExecution timeMemory
119437davitmargTriangles (CEOI18_tri)C++17
0 / 100
2 ms384 KiB
/*DavitMarg*/ #include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #include <map> #include <set> #include <queue> #include <iomanip> #include <stack> #include <cassert> #include <iterator> #include <bitset> #include <fstream> #ifndef death #include<trilib.h> #endif // death #define mod 1000000007ll #define LL long long #define LD long double #define MP make_pair #define PB push_back #define all(v) v.begin(),v.end() using namespace std; #ifdef death int get_n() { cout << "N::" << endl; int x; cin >> x; return x; } bool is_clockwise(int a, int b, int c) { cout << ":::" << a << " " << b << " " << c << endl; int x; cin >> x; return x; } void give_answer(int x) { cout << x << endl; } #endif // death map<pair<int, pair<int, int>>, bool> used, pre; bool cw(int a, int b, int c) { if (a == b || b == c || c == a) return 1; if (used[MP(a, MP(b, c))]) return pre[MP(a, MP(b, c))]; used[MP(a, MP(b, c))] = 1; return pre[MP(a, MP(b, c))] = is_clockwise(a, b, c); } bool ccw(int a, int b, int c) { if (a == b || b == c || c == a) return 1; return !cw(a, b, c); } int convex(vector<int> p) { vector<int> up, down; vector<bool> uUp(p.size() + 5), uDown(p.size() + 5); int st, en; st = p[0]; en = p.back(); reverse(all(p)); p.pop_back(); reverse(all(p)); p.pop_back(); vector<int> add = p; p.clear(); p.PB(st); for (int i = 0; i < add.size(); i++) for (int j = 0; j < add.size(); j++) p.PB(add[j]); p.PB(en); up.PB(p[0]); down.PB(p[0]); for (int i = 1; i < p.size(); i++) { if (i == p.size() - 1 || (!uUp[p[i]] && cw(p[0], p[i], p[p.size() - 1]))) { while (up.size() > 1 && (!cw(up[up.size() - 2], up[up.size() - 1], p[i]) || up.back() == p[i])) { uUp[up.back()] = 0; up.pop_back(); } up.PB(p[i]); uUp[up.back()] = 1; } if (i == p.size() - 1 || (!uDown[p[i]] && ccw(p[0], p[i], p[p.size() - 1]))) { while (down.size() > 1 && (!ccw(down[down.size() - 2], down[down.size() - 1], p[i]) || down.back() == p[i])) { uDown[down.back()] = 0; down.pop_back(); } down.PB(p[i]); uDown[down.back()] = 1; } } down.pop_back(); reverse(all(down)); down.pop_back(); reverse(all(down)); while (!down.empty()) { up.PB(down.back()); down.pop_back(); } for (int i = 0; i < up.size(); i++) if (!cw(up[i], up[(i + 1) % up.size()], up[(i + 2) % up.size()])) return 0; return up.size(); } int ans, n; vector<int> p; int main() { n = get_n(); for (int i = 1; i <= n; i++) p.PB(i); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (i == j) continue; swap(p[0], p[i]); swap(p.back(), p[j]); ans = max(ans, convex(p)); swap(p[0], p[i]); swap(p.back(), p[j]); } give_answer(ans); return 0; } /* 4 1 0 0 0 1 1 */

Compilation message (stderr)

tri.cpp: In function 'int convex(std::vector<int>)':
tri.cpp:92:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < add.size(); i++)
                  ~~^~~~~~~~~~~~
tri.cpp:93:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < add.size(); j++)
                   ~~^~~~~~~~~~~~
tri.cpp:99:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < p.size(); i++)
                  ~~^~~~~~~~~~
tri.cpp:101:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (i == p.size() - 1 || (!uUp[p[i]] && cw(p[0], p[i], p[p.size() - 1])))
       ~~^~~~~~~~~~~~~~~
tri.cpp:112:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (i == p.size() - 1 || (!uDown[p[i]] && ccw(p[0], p[i], p[p.size() - 1])))
       ~~^~~~~~~~~~~~~~~
tri.cpp:133:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < up.size(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...