Submission #1206547

#TimeUsernameProblemLanguageResultExecution timeMemory
1206547StefanSebezRotating Lines (APIO25_rotate)C++20
13 / 100
3095 ms1888 KiB
#include "rotate.h"
#include <vector>
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
const int N=50000;
vector<array<int,2>>a;
int n;
vector<int>v;
int dist(int x,int y){return min(abs(x-y),N-abs(x-y));}
ll Calc(){
	ll res=0;
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			res+=dist(v[i],v[j]);
		}
	}
	return res;
}
void energy(int n1, std::vector<int> v1){
	v=v1;n=n1;
	/*for(int i=0;i<n;i++) a.pb({v[i],i});
	sort(a.begin(),a.end());
	for(int i=0;i<n;i++){
		if(i<=(n-1)/2){
			rotate({a[i][1]},a[0][0]-a[i][0]);
		}
		else{
			rotate({a[i][1]},a[0][0]-a[i][0]+N);
		}
	}*/
	//ll res=Calc();
	for(int i=0;i<n;i++){
		vector<int>x;
		/*for(int j=0;j<n;j++){
			x.pb(v[j]);
			x.pb((v[j]+N/2)%N);
		}*/
		for(int j=0;j<N;j++) x.pb(j);
		/*while(1){
			v[i]=(v[i]+1)%N;
			ll x=Calc();
			if(x<=res){
				v[i]=(v[i]-1+N)%N;
				break;
			}
			res=x;
			rotate({i},1);
		}*/
		ll maks=0,dx;
		for(auto X:x){
			ll sum=0;
			for(int j=0;j<n;j++){
				if(i==j) continue;
				sum+=dist(X,v[j]);
			}
			if(sum>=maks){
				maks=sum;
				dx=X;
			}
		}
		rotate({i},dx-v[i]);
		v[i]=dx;
	}
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...