zoukankan      html  css  js  c++  java
  • IOI2021集训队作业 210AI Sensor Network

    平面图,两点右边当且仅当距离小于等于(d)

    求最大团。

    (nle 100,dle 10^4,|x_i|,|y_i|le 10^4)


    随机排列若干次,然后贪心找最大团就对了???


    using namespace std;
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define N 105
    int n,k;
    struct DOT{
    	int x,y;
    } d[N];
    int p[N];
    int e[N][N];
    int q[N],nq;
    int ansq[N],ans;
    bool judge(int x){
    	for (int i=1;i<=nq;++i)
    		if (!e[x][q[i]])
    			return 0;
    	return 1;	
    }
    int main(){
    //	freopen("in.txt","r",stdin);
    	scanf("%d%d",&n,&k);
    	for (int i=1;i<=n;++i)
    		scanf("%d%d",&d[i].x,&d[i].y);
    	for (int a=1;a<=n;++a)
    		for (int b=1;b<=n;++b)
    			e[a][b]=(((d[a].x-d[b].x)*(d[a].x-d[b].x)+(d[a].y-d[b].y)*(d[a].y-d[b].y)<=k*k));
    	for (int i=1;i<=n;++i)
    		p[i]=i;
    	for (int T=1;T<=100000;++T){
    		random_shuffle(p+1,p+n+1);
    		nq=0;平面图,两点右边当且仅当距离小于等于$d$。
    
    求最大团。
    
    $nle 100,dle 10^4,|x_i|,|y_i|le 10^4$
    
    ---
    
    随机排列若干次,然后贪心找最大团就对了???
    
    ---
    
    ```cpp
    using namespace std;
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define N 105
    int n,k;
    struct DOT{
    	int x,y;
    } d[N];
    int p[N];
    int e[N][N];
    int q[N],nq;
    int ansq[N],ans;
    bool judge(int x){
    	for (int i=1;i<=nq;++i)
    		if (!e[x][q[i]])
    			return 0;
    	return 1;	
    }
    int main(){
    //	freopen("in.txt","r",stdin);
    	scanf("%d%d",&n,&k);
    	for (int i=1;i<=n;++i)
    		scanf("%d%d",&d[i].x,&d[i].y);
    	for (int a=1;a<=n;++a)
    		for (int b=1;b<=n;++b)
    			e[a][b]=(((d[a].x-d[b].x)*(d[a].x-d[b].x)+(d[a].y-d[b].y)*(d[a].y-d[b].y)<=k*k));
    	for (int i=1;i<=n;++i)
    		p[i]=i;
    	for (int T=1;T<=100000;++T){
    		random_shuffle(p+1,p+n+1);
    		nq=0;
    		for (int i=1;i<=n;++i)
    			if (judge(p[i]))
    				q[++nq]=p[i];
    		if (nq>ans){
    			ans=nq;
    			memcpy(ansq,q,sizeof(int)*(ans+1));
    		}
    	}
    	printf("%d
    ",ans);
    	for (int i=1;i<=ans;++i)
    		printf("%d ",ansq[i]);
    	return 0;
    }
    
    	for (int i=1;i<=n;++i)
    		if (judge(p[i]))
    			q[++nq]=p[i];
    	if (nq>ans){
    		ans=nq;
    		memcpy(ansq,q,sizeof(int)*(ans+1));
    	}
    }
    printf("%d
    ",ans);
    for (int i=1;i<=ans;++i)
    	printf("%d ",ansq[i]);
    return 0;
    

    }

  • 相关阅读:
    关于CSS自文档的思考_css声明式语言式代码注释
    html5中contenteditable属性如果过滤标签,过滤富文本样式
    web前端工程化/构建自动化
    Python连载19-装饰器
    Java连载1-概述&常用的dos命令
    HTML连载18-id选择器与class区别&class选择器使用思路&后代选择器
    Python连载18-closure闭包解释及其注意点
    HTML连载17-id选择器&类选择器
    Python连载17-排序函数&返回函数的函数
    HTML连载16-颜色控制属性2&标签选择器
  • 原文地址:https://www.cnblogs.com/jz-597/p/13965821.html
Copyright © 2011-2022 走看看