zoukankan      html  css  js  c++  java
  • 试题 H: 人物相关性分析 第十届蓝桥杯

    试题 H: 人物相关性分析
    时间限制: 1.0s 内存限制: 512.0MB 本题总分: 20
    【问题描述】
    小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice Bob有多少次同时出现。
    更准确的说,小明定义 Alice Bob“同时出现”的意思是:在小说文本中 Alice Bob 之间不超过 K 个字符。
    例如以下文本:
    This is a story about Alice and Bob. Alice wants to send a private message to Bob.
    假设 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 a private message to Bob.

    【样例输出】
    2
    【评测用例规模与约定】
    对于所有评测用例, 1 K 1000000

     

    借鉴:https://blog.csdn.net/malimingwq/article/details/88953526

    在Java的String类中有个用于分割字符串的方法split(String regex):String[],将此方法用于以空格.分割输入的字符串,然后枚举返回的String[],找到配对的Alice和Bob,还可以方便的统计每对组合间间隔的字符串长度。

    import java.util.Scanner;
    
    public class Main{
        
        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);
        }
        
    }
  • 相关阅读:
    String、Stringbuilder、StringBuffer之间的练习与区别
    JAVA——重点非阻塞模型:NIO模型及IO操作步骤
    JAVA——IO模型分类
    SpringBoot(六) SpringBoot使用汇总(持续更新)
    Java高级(一) Future机制
    SpringBoot(二) 事务
    Java8(七) 新的DateTime API
    Java8(六) Optional
    Java8(五) 接口默认方法
    Java8(四) StreamAPI
  • 原文地址:https://www.cnblogs.com/chiweiming/p/10674087.html
Copyright © 2011-2022 走看看