zoukankan      html  css  js  c++  java
  • 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);
    	    }
    
    }
    
    
  • 相关阅读:
    35 个 Java 代码性能优化总结
    P4172 [WC2006]水管局长(LCT)
    P4219 [BJOI2014]大融合(LCT)
    P1501 [国家集训队]Tree II(LCT)
    P4381 [IOI2008]Island(基环树+单调队列优化dp)
    P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)
    P3809 【模板】后缀排序
    P3813 [FJOI2017]矩阵填数(组合数学)
    P2147 [SDOI2008]洞穴勘测(LCT)
    P3924 康娜的线段树(期望)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947752.html
Copyright © 2011-2022 走看看