제출 #73423

#제출 시각아이디문제언어결과실행 시간메모리
73423zscoderTriangles (CEOI18_tri)C++17
35 / 100
3028 ms63936 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include "trilib.h"
 
using namespace std;
using namespace __gnu_pbds;
 
#define fi first
#define se second
#define mp make_pair
#define pb push_back
 
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef long double ld; 
typedef tree<ii, null_type, less<ii>, rb_tree_tag, tree_order_statistics_node_update> pbds;
 
int nn; int god;
map<int,bool> ma;
 
int hsh(int x, int y, int z)
{
	return (x<<18)^(y<<9)^z;
}
 
bool ex(int x, int y, int z)
{
	return (ma.find(hsh(x,y,z))!=ma.end());
}
 
bool is_cl(int x, int y, int z)
{
	if(ex(x,y,z)) return ma[hsh(x,y,z)];
	if(ex(x,z,y)) return !ma[hsh(x,z,y)];
	if(ex(y,x,z)) return !ma[hsh(y,x,z)];
	if(ex(y,z,x)) return ma[hsh(y,z,x)];
	if(ex(z,x,y)) return ma[hsh(z,x,y)];
	if(ex(z,y,x)) return !ma[hsh(z,y,x)];
	return (ma[hsh(x,y,z)] = is_clockwise(x+1,y+1,z+1));
}
bool cmp(int x, int y)
{
	return is_cl(god,x,y);
}
int ans;
 
void solve_init(int u)
{
	vector<int> vec;
	for(int i=0;i<nn;i++)
	{
		if(u!=i) vec.pb(i);
	}
	god=u;
	stable_sort(vec.begin(),vec.end(),cmp);
	if(is_cl(god,vec.back(),vec.front())) return ;
	vector<int> S;
	S.pb(u);
	S.pb(vec[0]); S.pb(vec[1]);
	for(int i=2;i<vec.size();i++)
	{
		int u=vec[i];
		while(S.size()>=2&&!is_cl(S[int(S.size())-2], S[int(S.size())-1], u))
		{
			S.pop_back();
		}
		S.pb(u);
	}
	ans=min(ans,int(S.size()));
}
 
int main()
{
	nn = get_n();
	ans = nn;
	vector<int> vertices;
	for(int i=0;i<nn;i++) vertices.pb(i);
	random_shuffle(vertices.begin(),vertices.end());
	for(int i=0;i<nn;i++)
	{
		if(nn>500&&i>=2) break;
		solve_init(vertices[i]);
	}
	give_answer(ans);
}

컴파일 시 표준 에러 (stderr) 메시지

tri.cpp: In function 'void solve_init(int)':
tri.cpp:62:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=2;i<vec.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...