zoukankan      html  css  js  c++  java
  • 算法--近义词反义词

    今天参加ACM校选,真的是伤心的到绝望,今年就没编过C++,语法都忘得差不多了,弄个helloWordl! 搞了20来分钟,简直日了狗。数组的传递忘干净了(自己太菜,比赛不知为啥死活调用函数时候无法传数组)报错,拿java编代码便习惯了,换到C艹各种艹啊。所以考到一半就放弃了。看着身边的大神一道道做完,自己哎,只做了2道,校选都过不去!!!!!眼睁睁看着题会做,不会用C++在纸上写java代码,心里这个苦。所以要拿c++编代码,用C++,用C++。

      当然今天我还是拿java把这次比赛见到的一个蛮有意思的题实现一下把。

     题目大概是这个意思
     *  近义词反义词 , 规则某单词的近义词的近义词也为近义词,某单词反义词的反义词为近义词。,首先输入两个个数字N T,N代表有N个单词,T 代表下面将有T行数据
     *   每行有三个整行数据  a1,b1,c1 . a1表示第a1个单词, b1表示第b1个单词,c1有两种取值 0与1
     *     0:两个为近义词
     *     1: 两个为反义词
     *  
     *    判断T行数据是否符合逻辑,如果符合逻辑那么返回0 ,若不符合返回开始出错的行号

    例如 :

    输入:

          3 3

          1 2 0

          1 3 0

          2 3 0

    输出 0

    输入

       3 3

       1 2 0

       1 3 1

       2 3 0

    输出 3
     

       这道题其实觉得思路不难,解体思路就是每个单词都有一个father,和一堆反义词。

       每读取一行数据时,有两种情况 c1=0 or c1=1

          1. c1=0;    if(  a1的爸爸的反义词库有b1的爸爸||b1的爸爸的反义词库有a1的爸爸)

                                       return  false.

                          else

                              将b1的爸爸的翻译添加道a1的爸爸的反义词库中

                             让b1的爸爸 认a1的爸爸为爸爸

                             让所有爸爸是b1爸爸的单词(包括b1) 都改认 a1 爸爸为爸爸

                              return true;

                           

         2. c2=0

                   if(a1的爸爸的近义词库有b1的爸爸||b1的爸爸的近义词库有a1的爸爸)

                              return false

                  else

                   让b1的爸爸的反义词库中  添加 a1的爸爸

                   同样a1的爸爸的反义词库中  添加 b1的爸爸

                          return true;

       好了主要的函数写完了,我们看代码的把哈哈哈

     1 import java.util.Scanner; 
     2 public class SynonymOpposite {
     3     static int [][]map;
     4     static int wordFather[];
     5     static StringBuffer wordOpposite[];
     6     static int N;
     7     public static boolean init(int a1,int b1,int c1){
     8         if(c1==0)//jinyici
     9         {
    10             if(wordOpposite[wordFather[a1]].indexOf(String.valueOf(wordFather[b1]))!=-1||wordOpposite[wordFather[b1]].indexOf(String.valueOf(wordFather[a1]))!=-1)
    11                 return false;
    12             else
    13             {
    14                  int b1Father =wordFather[b1];
    15                  for(int i=1;i<=N;i++)
    16                  {
    17                      if(wordFather[i]==b1Father)//将它链接到a1中去
    18                      {
    19                          wordFather[i]=wordFather[a1];
    20                      }
    21                  }
    22                  wordOpposite[a1].append(wordOpposite[wordFather[b1]].toString());//同步反义词
    23             }
    24         }
    25         else
    26         {
    27             if(wordFather[a1]==wordFather[b1])
    28             {
    29                 return false;
    30             }
    31             else
    32             {
    33                 wordOpposite[wordFather[a1]].append(wordFather[b1]);
    34                 wordOpposite[wordFather[b1]].append(wordFather[a1]);
    35             }
    36         }
    37         return true;
    38     }
    39     public static void main(String[] args) {
    40         // TODO Auto-generated method stub
    41        int col=0;
    42        Scanner sc=new Scanner(System.in);
    43        N=sc.nextInt();
    44        map=new int [N+1][N+1];
    45        wordFather=new int [N+1];
    46        wordOpposite=new StringBuffer [N+1];
    47        for(int i=1;i<=N;i++)
    48        {
    49            wordFather[i]=i;  
    50            wordOpposite[i]=new StringBuffer();
    51        }  
    52        col=sc.nextInt();
    53         int []a1=new int [col+1];
    54         int []b1=new int [col+1];
    55         int []c1=new int [col+14];
    56        for(int i=1;i<=col;i++)
    57        {
    58            a1[i]=sc.nextInt();
    59            b1[i]=sc.nextInt();
    60            c1[i]=sc.nextInt();   
    61        }
    62        int i=0;
    63        for( i=1;i<=col;i++)
    64        {
    65            if(!init(a1[i], b1[i], c1[i]))
    66            {
    67                System.out.println(i);
    68                i=0;
    69                break;
    70            }
    71        }
    72       if(i!=0)
    73         System.out.println("yes");  
    74          
    75     }
    76 
    77 }
  • 相关阅读:
    HDU——1061Rightmost Digit(高次方,找规律)
    HDU——1019Least Common Multiple(多个数的最小公倍数)
    HDU——1013Digital Roots(九余数定理)
    HDU——1020Encoding(水题,string过)
    HDU——2093考试排名(string类及其函数的运用以及istringstream)
    廖雪峰Java3异常处理-2断言和日志-4使用Log4j
    廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging
    廖雪峰Java3异常处理-2断言和日志-2使用JDK Logging
    廖雪峰Java3异常处理-2断言和日志-1使用断言
    Charles问题
  • 原文地址:https://www.cnblogs.com/LeslieForever/p/6687142.html
Copyright © 2011-2022 走看看