zoukankan      html  css  js  c++  java
  • Codeforces 333E Summer Earnings ——Bitset

    【题目分析】

        找一个边长最大的三元环。

        把边排序,然后依次加入。加入(i,j)时,把i和j取一个交集,看看是否存在,存在就找到了最大的三元环。

        输出即可,n^3/64水过。

    【代码】

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    
    #include <set>
    #include <bitset>
    #include <map>
    #include <string>
    #include <algorithm>
    #include <vector>
    #include <iostream>
    #include <queue>
    
    using namespace std;
    
    #define maxn 3010
    #define mlog 16
    #define F(i,j,k) for (int i=j;i<=k;++i)
    #define inf (0x3f3f3f3f)
    
    int Getint()
    {
        int x=0,f=1; char ch=getchar();
        while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
        while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    
    struct edge{int l,r;double d;}e[maxn*maxn];
    struct Point{int x,y;}a[maxn];
    int n,cnt=0;
    bool cmp(edge x,edge y){return x.d>y.d;}
    bitset <maxn> b[maxn];
    
    int main()
    {
    	n=Getint();
    	F(i,1,n)
    	{
    		a[i].x=Getint();
    		a[i].y=Getint();
    	}
    	F(i,1,n-1)
    		F(j,i+1,n)
    		{
    			e[++cnt].l=i;
    			e[cnt].r=j;
    			e[cnt].d=sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
    		}
    	sort(e+1,e+cnt+1,cmp);
    	F(i,1,cnt)
    	{
    		if ((b[e[i].l]&b[e[i].r]).count())
    		{
    			printf("%.20f
    ",e[i].d/2);
    			return 0;
    		}
    		b[e[i].l][e[i].r]=1;
    		b[e[i].r][e[i].l]=1;
    	}
    }
    

      

  • 相关阅读:
    Android ANR异常解决方案
    数据结构之斐波那契查找
    数据结构之插值查找
    数据结构之折半查找
    Android Task 任务
    java中“==”号的运用
    php中向前台js中传送一个二维数组
    array_unique和array_flip 实现去重间的区别
    js new Date() 获取时间
    手机端html5触屏事件(touch事件)
  • 原文地址:https://www.cnblogs.com/SfailSth/p/6344780.html
Copyright © 2011-2022 走看看