• Java实现第十届蓝桥杯人物相关性分析


    试题 H: 人物相关性分析
    时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
    【问题描述】
    小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob 有多少次同时出现。 更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:在小说文本 中 Alice 和 Bob 之间不超过 K 个字符。 例如以下文本: ThisisastoryaboutAliceandBob.AlicewantstosendaprivatemessagetoBob. 假设 K = 20,则 Alice 和 Bob 同时出现了 2 次,分别是”Alice and Bob” 和”Bob. Alice”。前者 Alice 和 Bob 之间有 5 个字符,后者有 2 个字符。 注意: 1. Alice 和 Bob 是大小写敏感的,alice 或 bob 等并不计算在内。 2. Alice 和 Bob 应为单独的单词,前后可以有标点符号和空格,但是不能 有字母。例如 Bobbi 並不算出现了 Bob。
    【输入格式】
    第一行包含一个整数 K。 第二行包含一行字符串,只包含大小写字母、标点符号和空格。长度不超 过 1000000。
    【输出格式】
    输出一个整数,表示 Alice 和 Bob 同时出现的次数。
    【样例输入】
    20 This is a story about Alice and Bob.Alice wants to send aprivate message to Bob.

    这道题最大的坑在于,你直接从PDF中复制下来, 他会没有空格,很多人做的时候会忽视这一点
    import java.util.Scanner;
    
    
    public class renwuxiangguanxing {
    	  public static void main(String[] args)  {
    	        Scanner reader=new Scanner(System.in);
    	        int res=0;    //save result
    	        int K=reader.nextInt();
    	        reader.nextLine();    //nextLine吸取回车键
    	        String str=reader.nextLine();
    	        String words[]=str.split("\s+|\.");    //以空格和.分割出来,注意.空格的组合存放为空字符串
    	        
    	        //    Alice------>Bob
    	        for(int i=0;i<words.length;i++){
    	            if(words[i].equals("Alice")){
    	                for(int j=i+1;j<words.length;j++){
    	                    if(words[j].equals("Bob")){
    	                        int sum=1;    //这里要等于1
    	                        for(int k=i+1;k<j;k++){
    	                            sum+=words[k].length()+1;
    	                        }
    	                        if(sum<=K){
    	                            res++;
    	                        }
    	                    }
    	                }
    	            }
    	        }
    	        
    	        //Bob--------->Alice
    	        for(int i=0;i<words.length;i++){
    	            if(words[i].equals("Bob")){
    	                for(int j=i+1;j<words.length;j++){
    	                    if(words[j].equals("Alice")){
    	                        int sum=1;    //这里要等于1
    	                        for(int k=i+1;k<j;k++){
    	                            sum+=words[k].length()+1;
    	                        }
    	                        if(sum<=K){
    	                            res++;
    	                        }
    	                    }
    	                }
    	            }
    	        }
    	        System.out.println(res);
    	    }
    
    }
    
    
  • 相关阅读:
    DataTable常用操作总结[转帖]
    Jquery实现淡入淡出效果
    在自定义Server Control中捆绑JS文件 [转帖]
    ASP.NET利用String.Join以分隔符號來串連集合資料 [转帖]
    fork()的一些测试
    大端小端表示法 && GAS对过程的实现
    GAS中流程控制的实现,for, while, if, switch
    一个看起来奇怪的C++程序 && c++操作符重载
    修改函数的返回地址
    stl algorithm sort ,unique
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077596.html
Copyright © 2020-2023  润新知