Submission #366370

# Submission time Handle Problem Language Result Execution time Memory
366370 2021-02-14T05:46:51 Z kshitij_sodani Planine (COCI21_planine) C++14
30 / 110
2000 ms 2800 KB
//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
#define endl '\n'


llo n,aa;
llo xx[1000001];
llo yy[1000001];
vector<pair<llo,llo>> ss;
set<pair<llo,llo>> cur;
set<pair<llo,llo>> cur2;
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n>>aa;
	for(llo i=0;i<n;i++){
		cin>>xx[i]>>yy[i];
	}
	for(llo i=2;i<n-1;i+=2){
	/*	double ac=((double)aa-yy[i]);
		ac/=((double)(yy[i+1]-yy[i]));
		ac*=((double)(xx[i+1]-xx[i]));*/
		pair<llo,llo> acc2={(xx[i+1]-xx[i])*(aa-yy[i]),(yy[i+1]-yy[i])};
		//acc2.a+=xx[i]*acc2.b;
		//ac+=xx[i];

		pair<llo,llo> bcc2={(xx[i-1]-xx[i])*(aa-yy[i]),(yy[i-1]-yy[i])};
	//	bcc2.a+=xx[i]*bcc2.b;
		//ac+=xx[i];
	/*	double bc=((double)aa-yy[i]);
		bc/=((double)(yy[i-1]-yy[i]));
		bc*=((double)(xx[i-1]-xx[i]));*/
		//bc+=xx[i];
		//cout<<setprecision(10)<<ac<<":"<<bc<<endl;
		
		/*ac*=1000000;
		bc*=1000000;
		llo acc=round(ac);
		llo bcc=round(bc);*/
		//if(n<=2000){
			for(llo j=1;j<n;j+=2){
				//if(j<i){
				if(yy[j]==yy[i]){
					continue;
				}
				pair<llo,llo> ccc2={(xx[j]-xx[i])*(aa-yy[i]),(yy[j]-yy[i])};
				
					if(j>i){
						if(acc2.a*ccc2.b>ccc2.a*acc2.b){
							acc2=ccc2;

						}
						//acc=min(acc,ccc);
					}
					if(j<i){
						if(bcc2.a*ccc2.b<ccc2.a*bcc2.b){
							bcc2=ccc2;

						}
					//	bcc=max(bcc,ccc);
					}
				//}
			}
	//	}
		acc2.a+=xx[i]*acc2.b;
		bcc2.a+=xx[i]*bcc2.b;
		long double ac=((long double)(acc2.a))/((long double)(acc2.b));
		long double bc=((long double)(bcc2.a))/((long double)(bcc2.b));
		ac*=10000000;
		bc*=10000000;
		
		llo acc=round(ac);
		llo bcc=round(bc);
		swap(acc,bcc);
		ss.pb({acc,bcc});
		//cout<<acc<<","<<bcc<<endl;

	}
	//return 0;
	for(auto j:ss){
		cur.insert(j);
		cur2.insert({j.b,j.a});
	}
//	sort(ss.begin(),ss.end(),cmp);
	llo ans=0;
	while(cur2.size()){
		ans++;
		pair<llo,llo> no=*(cur2.begin());
	//	cout<<no.a<<":"<<no.b<<endl;
		while(cur.size()){
			pair<llo,llo> no2=*(cur.begin());
		//	cout<<no2.a<<",,"<<no2.b<<endl;
			if(no2.a<=no.a){	
				cur.erase(no2);
				cur2.erase({no2.b,no2.a});
			}
			else{
				break;
			}
		}
		//break;
	}



	cout<<ans<<endl;




 
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 81 ms 1260 KB Output is correct
2 Correct 81 ms 1260 KB Output is correct
3 Correct 81 ms 1260 KB Output is correct
4 Execution timed out 2082 ms 2800 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 492 KB Output is correct
2 Correct 5 ms 492 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 5 ms 492 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 5 ms 492 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 81 ms 1260 KB Output is correct
2 Correct 81 ms 1260 KB Output is correct
3 Correct 81 ms 1260 KB Output is correct
4 Execution timed out 2082 ms 2800 KB Time limit exceeded
5 Halted 0 ms 0 KB -