• CSP 202005-1 重复局面


    题目背景

    国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。

    问题描述

    国际象棋每一个局面可以用大小为 的字符数组来表示,其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母 k、q、r、b、n、p 表示,其中大写字母对应白方、小写字母对应黑方。棋盘上无棋子处用字符 * 表示。两个字符数组的每一位均相同则说明对应同一局面。

    现已按上述方式整理好了每步棋后的局面,试统计每个局面分别是第几次出现。

    在这里插入图片描述

    输入格式

    从标准输入读入数据。

    输入的第一行包含一个正整数 ,表示这盘棋总共有 步。

    接下来 8*n行,依次输入第 1到第 8步棋后的局面。具体来说每行包含一个长度为 的字符串,每 8行字符串共 64个字符对应一个局面。

    输出格式

    输出到标准输出中。

    输出共 n行,每行一个整数,表示该局面是第几次出现。

    • 样例输入
    8
    ********
    ******pk
    *****r*p
    p*pQ****
    ********
    **b*B*PP
    ****qP**
    **R***K*
    ********
    ******pk
    *****r*p
    p*pQ****
    *b******
    ****B*PP
    ****qP**
    **R***K*
    ********
    ******pk
    *****r*p
    p*p*****
    *b**Q***
    ****B*PP
    ****qP**
    **R***K*
    ******k*
    ******p*
    *****r*p
    p*p*****
    *b**Q***
    ****B*PP
    ****qP**
    **R***K*
    ******k*
    ******p*
    *****r*p
    p*pQ****
    *b******
    ****B*PP
    ****qP**
    **R***K*
    ********
    ******pk
    *****r*p
    p*pQ****
    *b******
    ****B*PP
    ****qP**
    **R***K*
    ********
    ******pk
    *****r*p
    p*p*****
    *b**Q***
    ****B*PP
    ****qP**
    **R***K*
    ********
    ******pk
    ******rp
    p*p*****
    *b**Q***
    ****B*PP
    ****qP**
    **R***K*
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 样例输出
    1
    1
    1
    1
    1
    2
    2
    1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    题解

    package csp;
    
    import java.util.*;
    
    public class DuplicateSituation {
        static Map<String,Integer> map=new HashMap();
        static Set<String> set =new HashSet();
        static int N=100;
        static int n;
        public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
             n=scanner.nextInt();
            for(int i=0;i<n;i++){
                StringBuilder sb=new StringBuilder();
                for(int j=1;j<=8;j++){
                    String temp= scanner.next();
                    sb.append(temp);
                }
                String s=sb.toString();
                if(set.contains(s)){
                    int ans=map.get(s)+1;
                    System.out.println(ans);
                    map.put(s,ans);
                }else{
                    map.put(s,1);
                    System.out.println(1);
                    set.add(s);
                }
    
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    思路

    这道题数据量不大,就是简单的哈希表的运用,合理读取数据便能求解。
    
    • 1
  • 相关阅读:
    关于HTML5画布canvas的功能
    什么是 API 接口?给大家举例说明
    基于VC++的局域网内主机监控系统设计与实现
    [nlp] 自然语言理解基准 ATIS Snips
    深入了解 TiDB SQL 优化器
    JMeter:断言之响应断言
    unordered_set --- 无序容器
    六月集训(第30天) —— 拓扑排序
    java学习(Arrays类和System类)
    基于Ubuntu Qt mqtt库的mqtt客户端实现
  • 原文地址:https://blog.csdn.net/qq_62235017/article/details/132858484