zoukankan      html  css  js  c++  java
  • 超级传输 (Hypertransmission,NEERC 2003,LA 2963)

     1 #include <iostream>
     2 #include <string.h>
     3 #include <string>
     4 #include <fstream>
     5 #include <algorithm>
     6 #include <stdio.h>
     7 #include <vector>
     8 #include <queue>
     9 #include <set>
    10 #include <cmath>
    11 using namespace std;
    12 const double eps = 1e-8;
    13 #define MAXN 1001
    14 struct node
    15 {
    16     int x,y,z,p;
    17 }star[MAXN];
    18 int Distance(node a,node b)
    19 {
    20     return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z);
    21 }
    22 struct node1
    23 {
    24     int a,b;
    25     int dist;
    26 }dis[MAXN*MAXN];
    27 bool cmp(node1 a,node1 b)
    28 {
    29     return a.dist<b.dist;
    30 }
    31 int minr;
    32 int num,numd;
    33 int N[MAXN][2];
    34 int main()
    35 {
    36     int n;
    37     while(scanf("%d",&n)!=EOF)
    38     {
    39         memset(dis,0,sizeof(dis));numd=0;
    40         for(int i=0;i<n;i++)
    41         {
    42         scanf("%d%d%d%d",&star[i].x,&star[i].y,&star[i].z,&star[i].p);
    43         for(int j=0;j<i;j++)
    44         if(i!=j)
    45         {dis[numd].a=i;dis[numd].b=j;dis[numd++].dist=Distance(star[i],star[j]);
    46             }
    47         }
    48         num=0;minr=0;
    49         memset(N,0,sizeof(N));
    50         sort(dis,dis+numd,cmp);
    51         for(int i=0;i<numd;i++)
    52         {
    53             int temp=dis[i].dist;
    54             while(dis[i].dist==temp){
    55             N[dis[i].a][star[dis[i].b].p]++;
    56             N[dis[i].b][star[dis[i].a].p]++;
    57             i++;}
    58             i--;
    59             temp=0;
    60             for(int j=0;j<n;j++)
    61             {
    62             if(N[j][star[j].p]+1<N[j][star[j].p^1])temp++;
    63             }
    64             if(temp>num){num=temp;minr=dis[i].dist;}
    65         }
    66         printf("%d
    %.4lf
    ",num,sqrt(minr*1.0));
    67     }
    68     return 0;
    69 }
    View Code

    poj 上没过,LA上过了 继续优化~

     1 #include <iostream>
     2 #include <string.h>
     3 #include <string>
     4 #include <fstream>
     5 #include <algorithm>
     6 #include <stdio.h>
     7 #include <vector>
     8 #include <queue>
     9 #include <set>
    10 #include <cmath>
    11 using namespace std;
    12 const double eps = 1e-8;
    13 #define MAXN 1001
    14 struct node
    15 {
    16     int x,y,z,p;
    17 }star[MAXN];
    18 int Distance(node a,node b)
    19 {
    20     return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z);
    21 }
    22 struct node1
    23 {
    24     int a,b;
    25     int dist;
    26 }dis[MAXN*MAXN];
    27 bool cmp(node1 a,node1 b)
    28 {
    29     return a.dist<b.dist;
    30 }
    31 int minr;
    32 int num,numd;
    33 int N[MAXN];
    34 int main()
    35 {
    36     int n;
    37     while(scanf("%d",&n)!=EOF)
    38     {
    39         memset(dis,0,sizeof(dis));numd=0;
    40         for(int i=0;i<n;i++)
    41         {
    42         scanf("%d%d%d%d",&star[i].x,&star[i].y,&star[i].z,&star[i].p);
    43         N[i]=1;
    44         for(int j=0;j<i;j++)
    45         if(i!=j)
    46         {dis[numd].a=i;dis[numd].b=j;dis[numd++].dist=Distance(star[i],star[j]);
    47             }
    48         }
    49         num=0;minr=0;
    50         sort(dis,dis+numd,cmp);
    51         int tempn=0;
    52         for(int i=0;i<numd;i++)
    53         {
    54             int temp=dis[i].dist;
    55             while(i<numd&&dis[i].dist==temp){
    56 
    57             if(star[dis[i].b].p==star[dis[i].a].p)
    58             {
    59             N[dis[i].a]++;
    60             N[dis[i].b]++;
    61             if(N[dis[i].a]==0)tempn--;
    62             if(N[dis[i].b]==0)tempn--;
    63             }
    64             else
    65             {
    66               N[dis[i].a]--;
    67             N[dis[i].b]--;
    68             if(N[dis[i].a]==-1)tempn++;
    69             if(N[dis[i].b]==-1)tempn++;
    70             }
    71             i++;
    72             }
    73             i--;
    74             /* temp=0;
    75             for(int j=0;j<n;j++)
    76             {
    77             if(N[j][star[j].p]+1<N[j][star[j].p^1])temp++;
    78             }*/
    79             if(tempn>num){num=tempn;minr=dis[i].dist;}
    80         }
    81         printf("%d
    %.4lf
    ",num,sqrt(minr*1.0));
    82     }
    83     return 0;
    84 }

    终于过了~

  • 相关阅读:
    【Luogu1501】Tree(Link-Cut Tree)
    【BZOJ3530】数数(AC自动机,动态规划)
    【BZOJ1212】L语言(AC自动机)
    【BZOJ2037】Sue的小球(动态规划)
    【BZOJ1899】午餐(动态规划)
    【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)
    【BZOJ1040】骑士(动态规划)
    【BZOJ1969】航线规划(Link-Cut Tree)
    【BZOJ4653】【NOI2016】区间(线段树)
    我也不知道什么是"莫比乌斯反演"和"杜教筛"
  • 原文地址:https://www.cnblogs.com/TO-Asia/p/3195772.html
Copyright © 2011-2022 走看看