Submission #121203

#TimeUsernameProblemLanguageResultExecution timeMemory
121203RockyBTriangles (CEOI18_tri)C++17
0 / 100
2 ms384 KiB
/// In The Name Of God
 
#include <bits/stdc++.h>
#include "trilib.h"
 
#define f first
#define s second
 
#define pb push_back
#define pp pop_back
#define mp make_pair
 
#define sz(x) (int)x.size()
#define sqr(x) ((x) * 1ll * (x))
#define all(x) x.begin(), x.end()
 
#define rep(i, l, r) for (int i = (l); i <= (r); i++)
#define per(i, l, r) for (int i = (l); i >= (r); i--)
 
#define Kazakhstan ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0);
 
#define nl '\n'
#define ioi exit(0);
 
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
 
const int N = (int)5e5 + 7;
const int inf = (int)1e9 + 7;
const int mod = (int)1e9 + 7;
const ll linf = (ll)1e18 + 7;
 
const int dx[] = {-1, 0, 1, 0, 1, -1, -1, 1};
const int dy[] = {0, 1, 0, -1, 1, -1, 1, -1};
 
using namespace std;
 
int n;
set <int> ans;

bool check(int i, int j) {
	set <int> st;
	for (int k = 1; k <= n; k++) {
		if (k == i || k == j) continue;
		st.insert(is_clockwise(i, j, k));
		if (sz(st) > 1) return 0;
	}
	return 1;
}


void solve(vector <int> a) {
	if (!sz(a)) return;
	if (sz(a) == 1) {
		ans.insert(a[0]);
		return;
	}
	if (sz(a) <= 10) {
		rep(i, 0, sz(a) - 1) {
			rep(j, i + 1, sz(a) - 1) {
				set <int> st;
				rep(k, 0, sz(a) - 1) {
					if (i == k || j == k) continue;
					st.insert(is_clockwise(a[i], a[j], a[k]));
				}
				if (sz(st) == 1) ans.insert(a[i]), ans.insert(a[j]);
			}
		}
		return;
	}
	vector <int> ok[2];
	int v1 = a[0], v2 = a[1];
	rep(i, 2, sz(a) - 1) {
		ok[is_clockwise(v1, v2, a[i])].pb(a[i]);
	}
	if (!sz(ok[0]) || !sz(ok[1])) {
		ans.insert(v1);
		ans.insert(v2);
		solve(ok[0]);
		solve(ok[1]);
	}
	else {
		ok[0].pb(v1);
		ok[1].pb(v2);
		solve(ok[0]);
		solve(ok[1]);
	}
}
int main() {
	#ifdef IOI2018
		freopen ("in.txt", "r", stdin);
	#endif
	n = get_n();
	vector <int> a;
	rep(i, 1, n) a.pb(i);
	solve(a);
	give_answer(sz(ans));
	ioi
}
#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...