算法--近义词反义词

今天参加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 ,若不符合返回开始出错的行号

这道题其实觉得思路不难,解体思路就是每个单词都有一个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 }
时间: 2024-11-05 14:08:15

算法--近义词反义词的相关文章

全文检索中近义词、关联词的解决方案

同义词腾讯api 一直想找到一个好的同义词解决方案,在百度和google查找,大家对于这个问题都只是寥寥数语,不愿讲清,我在javaeye搜此类信息也求不到,后来发了个提问贴也只有浏览数而无回复,不知道这是什么原因,无奈之下我只有自己研究. 因为没有其它的解决方案可以借鉴,以下纯为我个人的见解. 我认为所谓近义词.关联词检索不外乎以下三种形式: 1.类似google suggest,用户输入关键字后自动提示功能. 2.假如“奥运会”的关联词是“北京”,用户输入“奥运会”搜索时,将“奥运会”的搜索

基于WordNet的英文同义词、近义词相似度评估及代码实现

作者:max_xbw 1.确定要解决的问题及意义 在基于代码片段的分类过程中,由于程序员对数据变量名的选取可能具有一定的规范性,在某一特定业务处理逻辑代码中,可能多个变量名之间具有关联性或相似性(如“trade”(商品交易)类中,可能存在“business”,“transaction”,“deal”等同义词),在某些情况下,它们以不同的词语表达了相同的含义.因此,为了能够对代码片段做出更加科学的类别判断,更好地识别这些同义词,我们有必要寻找一种能够解决避免由于同义词的存在而导致误分类的方法.说白

句子逆序,近义词维护,数字颠倒,蛇形矩阵

一.句子逆序描述:  将一个英文语句以单词为单位逆序排放.例如“I am a boy”,逆序排放后为“boy a am I” 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符 接口说明 /**  * 反转句子  *   * @param sentence 原句子  * @return 反转后的句子  */ public String reverse(String sentence); 1 public class StringReverse { 2 public static

OJ初级-句子逆序,近义词维护,数字颠倒,蛇形矩阵

备注:所有基础的练习题都不能借助相应功能的工具函数 一.句子逆序描述:  将一个英文语句以单词为单位逆序排放.例如“I am a boy”,逆序排放后为“boy a am I” 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符 接口说明 /**  * 反转句子  *   * @param sentence 原句子  * @return 反转后的句子  */ public String reverse(String sentence); 二.近义词维护 给定接口,设置两个单词相互

java实现近义词维护

题目要求:一.近义词维护 给定接口,设置两个单词相互近义.近义词具有相互传递性,如果A和B为近义词,B和C是近义词,那么A.B.C都为近义词.要求提供接口,查询给定的两个但是是否是近义词关系.并且能提供接口清除所有的近义词关系. 接口说明 /**  * 设置2个单词为近义词  * @param word1 单词一  * @param word2 单词二  * @return 0为成功,-1为失败或其他异常  */ public int setSynonyms(String word1, Stri

近义词调研评估与代码实现(不断完善中…)

  1.确定要解决的问题及意义 在基于代码片段的分类过程中,由于程序员对数据变量名的选取可能具有一定的规范性,在某一特定业务处理逻辑代码中,可能多个变量名之间具有关联性或相似性(如“trade”(商品交易)类中,可能存在“business”,“transaction”,“deal”等同义词),在某些情况下,它们以不同的词语表达了相同的含义.因此,为了能够对代码片段做出更加科学的类别判断,更好地识别这些同义词,我们有必要寻找一种能够解决避免由于同义词的存在而导致误分类的方法.说白了,就是要去判断词

elasticsearch 近义词-远程配置

curl -XPOST 'http://localhost:9200/sy4' -d '{ "analysis": { "analyzer":{ "mysynonym":{ "type": "custom", "tokenizer":"ik_smart", "filter":[ "remote_synonym" ] } }, &

基于Smadja算法的搭配词自动提取

搭配词(collocation) 广义而言,搭配词(collocation)是指两个或多个词一招语言习惯性结合在一起表示某种特殊意义的词汇.搭配词在不同的研究领域上又不同的解读,尚未有一致性的定义.大概的意思就是词语的习惯搭配了,就是学英语时老师一直拿来搪塞我们的那种『习惯搭配』.比如sit in traffic,表示堵车或者在通勤上花费了非常多时间的意思,那么sit_traffic就是一个搭配词.其中sit称为base word,traffic称为collocate. 所以collocatio

DFA算法过滤敏感词整理

这里有部分是从网上找的,但看起来太乱了,分的太散了.研究了几天,整理出来,有问题的话还请大虾们提出来.... package org.rui.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; i