zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛 L2-028. 秀恩爱分得快

    1.输入-0(第一部分、第二部分),输出-0
    2.只统计与两个人的亲密程度,否则超时

    Data:

    4 1
    4 -0 1 -2 3
    -0 1

    -0 1

    ------

    4 1

    3 1 -2 3
    -0 1

    -0 1
    -0 3
    1 -2

    ------

    4 2
    4 -0 1 -2 3
    2 -0 3
    1 -0

    1 -0
    1 -2
    -0 3

      1 /*
      2 1.输入-0(第一部分、第二部分),输出-0
      3 2.只统计与两个人的亲密程度,否则超时 
      4 */
      5 #include <cstdio>
      6 #include <cstdlib>
      7 #include <cstring>
      8 #include <cmath>
      9 #include <stdbool.h>
     10 #include <set>
     11 #include <vector>
     12 #include <map>
     13 #include <algorithm>
     14 using namespace std;
     15 
     16 double f[2][1005];
     17 long d[1005][505],sex[1005],g[1005];
     18 
     19 void print(long x,long y)
     20 {
     21     if (x==0 && sex[x]==-1)
     22         printf("-0");
     23     else
     24         printf("%ld",x*sex[x]);
     25     printf(" ");        
     26     if (y==0 && sex[y]==-1)
     27         printf("-0");
     28     else
     29         printf("%ld",y*sex[y]);
     30     printf("
    ");
     31 }
     32 
     33 bool pan(double x,double y)
     34 {
     35     if (fabs(x-y)<0.0000001)
     36         return true;
     37     else
     38         return false;
     39 }
     40 
     41 bool pan1(double x,double y)
     42 {
     43     if (fabs(x-y)<0.0000001)
     44         return true;
     45     if (x>y)
     46         return true;
     47     else
     48         return false;    
     49 }
     50 
     51 int main()
     52 {
     53     char s[10];
     54     long n,m,i,j,k,x,y,w;
     55     double v1,v2;
     56     scanf("%ld%ld",&n,&m);
     57     for (i=0;i<=1;i++)
     58         for (j=0;j<n;j++)
     59             f[i][j]=0;
     60     for (k=1;k<=m;k++)
     61     {
     62         scanf("%ld",&g[k]);
     63         for (i=1;i<=g[k];i++)
     64         {
     65             scanf("%s",s);
     66             if (s[0]=='-')
     67             {
     68                 w=strlen(s);
     69                 strncpy(s,s+1,w-1);
     70                 s[w-1]='';
     71                 d[k][i]=atoi(s);
     72                 sex[d[k][i]]=-1;
     73             }
     74             else
     75             {
     76                 d[k][i]=atoi(s);
     77                 sex[d[k][i]]=1;
     78             }
     79         }
     80     }
     81     
     82     scanf("%s",s);
     83     if (s[0]=='-')
     84     {
     85         w=strlen(s);
     86         strncpy(s,s+1,w-1);
     87         s[w-1]='';
     88         x=atoi(s);
     89         sex[x]=-1;
     90     }
     91     else
     92     {
     93         x=atoi(s);
     94         sex[x]=1;
     95     }
     96     
     97     scanf("%s",s);
     98     if (s[0]=='-')
     99     {
    100         w=strlen(s);
    101         strncpy(s,s+1,w-1);
    102         s[w-1]='';
    103         y=atoi(s);
    104         sex[y]=-1;
    105     }
    106     else
    107     {
    108         y=atoi(s);
    109         sex[y]=1;
    110     }
    111     
    112     for (k=1;k<=m;k++)
    113     {
    114         for (i=1;i<=g[k];i++)
    115             if (d[k][i]==x)
    116             {
    117                 for (j=1;j<=g[k];j++)
    118                     if (sex[d[k][i]]+sex[d[k][j]]==0)
    119                         f[0][d[k][j]]+=1.0/g[k];
    120             }
    121                         
    122         for (i=1;i<=g[k];i++)
    123             if (d[k][i]==y)
    124             {
    125                 for (j=1;j<=g[k];j++)
    126                     if (sex[d[k][i]]+sex[d[k][j]]==0)
    127                         f[1][d[k][j]]+=1.0/g[k];
    128             }        
    129     }
    130     
    131     v1=0;
    132     for (i=0;i<n;i++)
    133         v1=max(v1,f[0][i]);
    134     
    135     v2=0;
    136     for (i=0;i<n;i++)
    137         v2=max(v2,f[1][i]);
    138 
    139     if (pan(v1,f[0][y]) && pan(v2,f[1][x]))
    140         print(x,y);
    141     else
    142     {
    143         //maybe maximum=0, double wrong(guess)
    144         for (i=0;i<n;i++)
    145             if (pan1(f[0][i],v1) && sex[i]+sex[x]==0)
    146                 print(x,i);
    147         for (i=0;i<n;i++)
    148             if (pan1(f[1][i],v2) && sex[y]+sex[i]==0)
    149                 print(y,i);
    150     }
    151     return 0;
    152 }
    153 /*
    154 4 1
    155 4 -0 1 -2 3
    156 -0 1
    157 
    158 -0 1
    159 
    160 ------
    161 
    162 4 1
    163 3 1 -2 3
    164 -0 1
    165 
    166 -0 1
    167 -0 3
    168 1 -2
    169 
    170 ------
    171 
    172 4 2
    173 4 -0 1 -2 3
    174 2 -0 3
    175 1 -0
    176 
    177 1 -0
    178 1 -2
    179 -0 3
    180 */
  • 相关阅读:
    Android SDK
    1055
    清除浮动的三种方式
    解决块状元素垂直外边距的塌陷问题
    drf 验证接口权限
    Linux常用指令
    Linux安装python3,virtualenv和virtualenvwrapper
    Linux基本命令2
    Linux之文档与目录结构
    Linux基本命令
  • 原文地址:https://www.cnblogs.com/cmyg/p/8718844.html
Copyright © 2011-2022 走看看