제출 #1329074

#제출 시각아이디문제언어결과실행 시간메모리
1329074Faisal_SaqibDrzava (COCI15_drzava)C++20
160 / 160
163 ms52700 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <array>
#include <cmath>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef long double ld;
int n,k;
bool win=0;
const int N=5e4+1,K=31;
bool pos[N][K];
int par[N];
bool np[K];
int get(int x)
{
    return (par[x]==x)?x:par[x]=get(par[x]);
}
void merge(int x,int y)
{
    x=get(x);
    y=get(y);
    if(x==y)return;
    par[x]=y;
    for(int i=0;i<k;i++)
    {
        for(int j=0;j<k;j++)
        {
            np[(i+j)%k]|=(pos[x][i]&pos[y][j]);
        }
    }
    for(int j=0;j<k;j++)
    {
        pos[y][j]|=np[j];
        pos[y][j]|=pos[x][j];
        np[j]=0;
    }
    win|=(pos[y][0]);
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>k;
    vector<array<ll,3>> a,edge;
    for(int i=0;i<n;i++)
    {
        ll x,y,kt;
        cin>>x>>y>>kt;
        a.push_back({x,y,i});
        par[i]=i;
        pos[i][(ll)(kt)%k]=1;
    }
    sort(begin(a),end(a));
    for(int i=0;i<n;i++)
    {
        for(int p=1;p<=25;p++)
        {
            int j=i+p;
            if(0<=j and j<n)
            {
                edge.push_back({((a[i][0]-a[j][0])*(a[i][0]-a[j][0])+(a[i][1]-a[j][1])*(a[i][1]-a[j][1])),a[i][2],a[j][2]});
                // edge.push_back({});
                // cout<<"adding "<<i<<' '<<j<<endl;
            }
        }
    }
    // for(int i=0;i<n;i++)
    // {
    //     for(int j=0;j<i;j++)
    //     {
    //         edge.push_back({((a[i][0]-a[j][0])*(a[i][0]-a[j][0])+(a[i][1]-a[j][1])*(a[i][1]-a[j][1])),i,j});
    //     }
    // }
    sort(begin(edge),end(edge));
    for(auto cur:edge)
    {
        merge(cur[1],cur[2]);
        if(win)
        {
            ld sq=sqrtl(cur[0]);
            cout<<fixed<<setprecision(3)<<round(sq*1000)/1000<<endl;
            return 0;
        }
    }
}
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...