답안 #97461

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
97461 2019-02-16T10:51:07 Z KLPP NLO (COCI18_nlo) C++14
33 / 110
71 ms 66560 KB
#include<bits/stdc++.h>

using namespace std;
typedef long long int lld;
typedef pair<int,int> pii;
set<int> s;
set<int>::iterator it;
lld A;
lld point;
lld calculate(vector<pair<int,pii > >v){
	sort(v.begin(),v.end());
	s.clear();
	point=0;
	A=0;
	for(int i=0;i<v.size();i++){
		if(s.size()>0){
			it=s.end();
			it--;
			lld s=*it;
			A+=s*(v[i].first-point);
			//cout<<s<<" "<<v[i].first-point<<endl;
		}
		point=v[i].first;
		//cout<<ans<<endl;
		if(v[i].second.second){
			s.erase(v[i].second.first);
		}else s.insert(v[i].second.first);
	}return A;
}
lld absol(lld a){
	if(a>0)return a;
	return -a;
}
lld lo,hi;
lld f(lld a, lld b){
	if(a<b)return -1;
	lo=0;
	hi=1000000000;
	while(hi-lo>1){
		lld mid=(hi+lo)/2;
		if(mid*mid+b*b<=a*a){
			lo=mid;
		}else hi=mid;
	}return lo;
}

int main(){
	int n,m;
	cin>>n>>m;
	int arr[n][m];
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++)arr[i][j]=0;
	}int k;
	cin>>k;
	vector<pair<int,pii > > SETS;
	int circles[k][3];
	for(int i=1;i<=k;i++){
		int x,y,r;
		cin>>x>>y>>r;
		x--;y--;
		circles[i-1][0]=x;
		circles[i-1][1]=y;
		circles[i-1][2]=r;
		//cout<<x<<" "<<y<<endl;
		
	}
	
	lld ans=0;
	lld diff,diff2;
	int x,y;
	for(int i=0;i<m;i++){
		for(int val=1;val<=k;val++){
			x=circles[val-1][0];
			y=circles[val-1][1];
			diff=absol(i-y);
			lld diff2=f(circles[val-1][2],diff);
			if(diff2!=-1){
				//cout<<r<<" "<<diff<<" "<<f(r,diff)<<endl;
				//cout<<j<<" "<<x-diff2<<" "<<x+diff2<<endl;
				SETS.push_back(pair<int,pii>(x-diff2,pii(val,0)));
				SETS.push_back(pair<int,pii>(x+1+diff2,pii(val,1)));
			}
		}
		ans+=k*n-calculate(SETS);
		SETS.clear();
		//SETS[i]->print();
	}cout<<ans<<endl;
	return 0;
}

Compilation message

nlo.cpp: In function 'lld calculate(std::vector<std::pair<int, std::pair<int, int> > >)':
nlo.cpp:15:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<v.size();i++){
              ~^~~~~~~~~
nlo.cpp: In function 'int main()':
nlo.cpp:50:6: warning: variable 'arr' set but not used [-Wunused-but-set-variable]
  int arr[n][m];
      ^~~
nlo.cpp:69:11: warning: unused variable 'diff2' [-Wunused-variable]
  lld diff,diff2;
           ^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 3840 KB Output is correct
2 Correct 26 ms 4224 KB Output is correct
3 Correct 67 ms 62584 KB Output is correct
4 Runtime error 71 ms 66560 KB Execution killed with signal 9 (could be triggered by violating memory limits)
5 Runtime error 60 ms 66560 KB Execution killed with signal 9 (could be triggered by violating memory limits)
6 Runtime error 3 ms 384 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 3 ms 384 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Runtime error 3 ms 384 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Runtime error 3 ms 384 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Runtime error 3 ms 512 KB Execution killed with signal 11 (could be triggered by violating memory limits)