zoukankan      html  css  js  c++  java
  • 【校内模拟7.30】—Ball(bitset)

    传送门

    大概想到了,结果没想到把n2n^2条边拉出来排序一个个加
    bitsetbitset维护就完了
    时间复杂度不会证
    似乎是O(n3ω)O(frac {n^3}omega)
    但无论如何都卡不满
    有点卡空间,压一压可以卡到40MB40MB

    #include<bits/stdc++.h>
    using namespace std;
    #define gc getchar
    inline int read(){
    	char ch=gc();
    	int res=0,f=1;
    	while(!isdigit(ch))f^=ch=='-',ch=gc();
    	while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();
    	return f?res:-res;
    }
    #define re register
    #define pb push_back
    #define cs const
    #define fi first
    #define se second
    #define ll long long
    cs int N=4005;
    struct pt{
    	int x,y;
    	pt(int _x=0,int _y=0):x(_x),y(_y){}
    	friend inline pt operator +(cs pt &a,cs pt &b){
    		return pt(a.x+b.x,a.y+b.y);
    	}
    	friend inline pt operator -(cs pt &a,cs pt &b){
    		return pt(a.x-b.x,a.y-b.y);
    	}
    	friend inline int operator *(cs pt &a,cs pt &b){
    		return a.x*b.y-a.y*b.x;
    	}
    	friend inline pt operator /(cs pt &a,cs int b){
    		return  pt(a.x/b,a.y/b);
    	}
    	inline int dis(){
    		return x*x+y*y;
    	}
    }p[N];
    bitset<N> v[N];
    struct node{
    	short fi,se;int dis;
    	friend inline bool operator <(cs node &a,cs node &b){
    		return a.dis>b.dis;
    	}
    };
    vector<node> vec;
    int n;
    int main(){
    	n=read();
    	for(int i=1;i<=n;i++)p[i].x=read(),p[i].y=read();
    	for(int i=1;i<=n;i++)
    	for(int j=1;j<i;j++)vec.pb(node{i,j,(p[i]-p[j]).dis()});
    	sort(vec.begin(),vec.end());
    	for(node &x:vec){
    		if((v[x.fi]&v[x.se]).count()){printf("%.8lf",sqrt((p[x.fi]-p[x.se]).dis())/2);return 0;}
    		v[x.fi].set(x.se),v[x.se].set(x.fi);
    	}
    } 
    
  • 相关阅读:
    Java后端工程师的学习技术栈
    ltp 分析 fail testcase
    程序员这个职业需要具备的素养
    你真的愿意到了50岁还要做编程吗?
    程序员的学习和积累
    程序员写博客的缘由
    VS2010生成文件
    从菜鸟到专家的五步编程语言学习法
    程序设计的18大原则
    怎样的代码才算是干净的代码?
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/12328735.html
Copyright © 2011-2022 走看看