• HDOJ 4039 (Data_Structure)


    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4039

           先给出很多朋友关系,然后找出谁和A有最多的共同朋友,并且此人和A不是朋友。比如A和C是朋友,B和C是朋友,所以要询问A的话,肯定输出B了。可能有多个,按字典序。

           因为string不好索引,我就用map了,先把键值放进去(自动排序),然后递增赋值(int)。用一个整型值作为string的代言人了。这样可以很方便的存放处理朋友关系。用一个二位数组存放朋友关系,比如A 和 D是朋友,A,D是1和4,则net[1][4]=true。初始化都是false。这样朋友关系网就建立了。

          比如要找与A有最多的共同朋友,所以这个人和A不是朋友(同过朋友关系网很好找),然后数他们有几个共同朋友,找出最多的,输出。

          思路那叫一个清晰啊!测试样例也是对的,一提交竟然超时了。为什么啊?求大神解惑!

    超时代码:

    #include <cstdio>
    #include <iostream>
    #include <map>
    #include <iterator>
    #include <cstdlib>
    #include <cstring>
    #define N 1001
    using namespace std;
    
    bool net[N][N];
    map <string,int> m;
    map <string,int>::iterator iter;
    
    string s[N][2];
     
    struct fri_num
    {
      int id;
      int num;       
    } fri[N];
    
    int relation,query,f;
    
    bool find_friend(string s,int n,int &f);
    int inti();
    
    int main()
    {
      string a,b,q; 
      int T,i,j,k,value,max,cnt = 1;   
      bool success;
      //freopen("in.txt","r",stdin);
      //freopen("me.txt","w",stdout);
      
      scanf("%d",&T);
      
        do
        {
            
          value = inti();
             
           printf("Case %d:\n",cnt++);  
          
           while(query--)
           {
              cin>>q;
              
              success = find_friend(q,value,f);
            
              if(success)
              {           
                  for(max = 0,i = 0 ; i < f ; ++i)
                    if(fri[i].num > max)
                       max = fri[i].num;
                  
                  if(!max)
                  {
                     puts("-"); goto loop;      
                  }
              
                   iter = m.begin();
                   for(i = 0 ; i < f ; ++i)
                   if( fri[i].num == max)
                   {
                      for(; iter != m.end(); ++iter)
                         if(iter->second == fri[i].id)
                         {
                           cout<<iter->first<<" ";
                           break;                
                         }     
                         iter++;                   
                   }
                   
                 printf("\n");    
              } 
              else
               puts("-"); 
               loop:;             
           }     
           
           
          m.clear();
         
        }while(--T);  
        
     // system("pause");
      return 0;
    }
    /*
       deal with the input
    */
    int inti()
    {
          int i,n;
          scanf("%d%d",&relation,&query);
          
          memset(net,false,sizeof(net));
        
          n = 0;  
          for(i = 0 ; i < relation ; ++i)
          {
              cin>>s[i][0]>>s[i][1];//用数组保存,下面要用 
              m[s[i][0]] = m[s[i][1]] = 0 ;  
          }   
          
          i = 0 ;   
          for(iter = m.begin();iter != m.end();++iter)
          {
             iter->second = i ;
             ++i;  
          }
          n = i;
          /*
           是朋友就赋值为 true 
          */
          for(i = 0 ; i < relation ;++i)
           net[ m[s[i][0]] ][m[ s[i][1]] ]  =  net[ m[ s[i][1]]][ m[s[i][0]] ] = true;      
         return n;
    }
    /*
      whether he can find a mutual friend
    */
    bool find_friend(string s,int n,int &f)
    {
         int i,j,k,tmp;
         bool succ = false;
         i = m[s];
         k = 0 ;
         f= 0 ;
         
            for(j = 0;j < n ;++j)
              if(j != i && !net[i][j])
              {
                   tmp = 0;
                   for(k = 0 ; k < n ; ++k)
                    if(net[i][k] && net[j][k])
                    {
                        succ = true;//找到共同朋友 
                        ++tmp;
                    }
                  
                   fri[f].num = tmp;
                   fri[f++].id = j;                
              }   
              
           return succ;
    }
    

      

  • 相关阅读:
    ASP.NET部署前环境检测
    (转)基于.Net的单点登录(SSO)解决方案(1)
    Easy UI 勾选单选框
    Sqlserver 自定义函数
    MVC站点安全开发
    (转)基于.Net的单点登录(SSO)解决方案(2)
    ASP.NET站点跨子域名单点登陆(SSO)的实现
    角色权限功能点设置页面
    XmlHelper
    MVC错误处理(三)
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/2447570.html
Copyright © 2020-2023  润新知