제출 #893574

#제출 시각아이디문제언어결과실행 시간메모리
893574vjudge1Road Construction (JOI21_road_construction)C++17
11 / 100
569 ms56500 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define pii pair<int,int>
using namespace __gnu_pbds;
using namespace std;
#define pb push_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define int long long
#define f first
#define s second
#define pii pair<int,int>
template<class T>bool umax(T &a,T b){if(a<b){a=b;return true;}return false;}
template<class T>bool umin(T &a,T b){if(b<a){a=b;return true;}return false;}
typedef tree<int, null_type, less_equal<int>, rb_tree_tag,
	tree_order_statistics_node_update> ordered_set;
const int mod= 1e9 +7;
const int N=1e5*4;
 
int binpow (int a, int n) {
	if (n == 0)
		return 1;
	if (n % 2 == 1)
		return binpow (a, n-1) * a;
	else {
		int b = binpow (a, n/2);
		return b * b;
	}
}
 
void solve(){
	int n,m,k;
	
	cin>>n>>k;
	
	if(n<=1000){
		vector<int>ans;
		vector<pii>vs;
		for(int i = 0;i<n;i++){
			int a,b;
			cin>>a>>b;
			vs.pb({a,b});
		}
		for(int i = 0;i<n;i++){
			for(int j = i + 1;j<n;j++){
				ans.pb(abs(vs[i].f-vs[j].f)+abs(vs[i].s-vs[j].s));
			}
		}
		sort(all(ans));
		
		for(int i = 0;i<k;i++){
			cout<<ans[i]<<"\n";
		}
		return;
		
	}
	
	else{
		vector<int>vs,ans;
		for(int i = 0;i<n;i++){
			int a,b;
			cin>>a>>b;
			vs.pb(a);
		}
		sort(all(vs));
		
		priority_queue <pair<int,pii>, vector <pair<int,pii>>, greater <pair<int,pii>> > q;
		map<pii,int>mp;
		for(int i = 0;i<n-1;i++){
			q.push({vs[i+1]-vs[i],{i,i+1}});
			mp[{i,i+1}] = 1;
		}
		
		
		while(ans.size()<k){
			auto [cost,to] = q.top();
			q.pop();
			ans.pb(cost);
			
			if(to.f>0&&mp[{to.f-1,to.s}]==0){
				mp[{to.f-1,to.s}] = 1;
				q.push({vs[to.s]-vs[to.f-1],{to.f-1,to.s}});
			}
			if(to.s<n-1&&mp[{to.f,to.s+1}]==0){
				mp[{to.f,to.s+1}] = 1;
				q.push({vs[to.s+1]-vs[to.f],{to.f,to.s+1}});
			}
		}
		
		for(auto to:ans)cout<<to<<"\n";
		return;
	}
	/*
4 6
0 0
1 0
3 0
4 0
*/	
	
	
}
 
 signed main()
{
//	freopen("seq.in", "r", stdin);
//  freopen("seq.out", "w", stdout);
	ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
	int tt=1;//cin>>tt;
	while(tt--)solve();
 
}

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

road_construction.cpp: In function 'void solve()':
road_construction.cpp:76:19: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   76 |   while(ans.size()<k){
      |         ~~~~~~~~~~^~
road_construction.cpp:33:8: warning: unused variable 'm' [-Wunused-variable]
   33 |  int n,m,k;
      |        ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...