2023年第六届传智杯程序设计挑战赛(个人赛)B组 赛后复盘

news/2024/7/15 17:06:23 标签: 算法, java, DP, Dfs, 传智杯, 图论, 补题

传智杯赛后复盘

大家好 我是寸铁👊
2023年第六届传智杯程序设计挑战赛(个人赛)B组 赛后复盘
喜欢的小伙伴可以点点关注 💝

1. 字符串拼接

细节:一定要清楚nextLine()next()的区别
nextLine()是遇到回车会停下来
next是遇到空格会停下来
很明显这里必须得选nextLine()
踩坑实录…

java">import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        StringBuffer s1 = new StringBuffer(str1);
        StringBuffer s2 = new StringBuffer(str2);
		 s1.append(s2);
        System.out.println(s1);
    }
}

2. 差值

java">import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象用于接收输入
        Scanner in = new Scanner(System.in);

        // 输入战士数量
        int n = in.nextInt();
        int[] strengths = new int[n];
        for (int i = 0; i < n; i++) {
            strengths[i] = in.nextInt();
        }

        // 对战士战斗力进行排序 以便比较相邻两位战士的战力之差
        Arrays.sort(strengths);

        // 初始化最小差值为一个较大的值
        int minDif = 0x3f3f3f3f;

        // 枚举相邻两名战士战斗力之差的最小值 
        for (int i = 0; i < n - 1; i++) {
            int currentDif = strengths[i + 1] - strengths[i];
            //更新战力之差的最小值
            if (currentDif < minDif) {
                minDif = currentDif;
            }
        }
        System.out.println(minDif);
        in.close();
    }
}

3. . 红色和紫色

很有趣的一题,奇数和偶数的区别

java">import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        //方格数量为偶数则yukari赢 因为yukari总会染成紫色
        if(n % 2 == 0 || m % 2 == 0){
            System.out.println("yukari");
        }
        else{
        //方格数量为奇数则akai赢 因为最后akai不能染成紫色    
            System.out.println("akai");
        }
    }
}

4. abb

dp 举出后面相同的字符就+1

java">import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            String str = in.next();
            int[][] dp = new int[n + 1][26];
            Arrays.fill(dp[n], 0);
            for (int i = n - 1; i >= 1; i--) {
                char ch = str.charAt(i);
                for (int j = 0; j < 26; j++) {
                    if (ch - 'a' == j) {
                        dp[i][j] = dp[i + 1][j] + 1;
                    } else {
                        dp[i][j] = dp[i + 1][j];
                    }
                }
            }
            long res = 0;
            for (int i = 1; i <= n; i++) {
                char c = str.charAt(i - 1);
                for (int j = 0; j < 26; j++) {
                    if (c - 'a' != j && dp[i][j] >= 2) {
                        res += dp[i][j] * (dp[i][j] - 1) / 2;
                    }
                }
            }
            System.out.println(res);
        }
    }
}

5. kotorti和素因子

dfs + 质数筛

java">import java.util.Scanner;
import java.util.ArrayList;

public class Main {
    static final int maxn = 1005;
    static final int INF = 0x3f3f3f3f;

    static int n, m, sum, min_, X;
    static ArrayList<Integer>[] e = new ArrayList[maxn];
    static boolean[] vis = new boolean[maxn];
    static boolean flag;

    static boolean isPrime(int n) {
        if (n == 1)
            return false;
        for (int i = 2; i <= Math.floor(Math.sqrt(n)); i++) {
            if (n % i == 0)
                return false;
        }
        return true;
    }

    static void prime(int n, int x) {
        for (int i = 1; i <= Math.floor(Math.sqrt(n)); i++) {
            if (n % i == 0) {
                if (isPrime(i))
                    e[x].add(i);
                if (i * i != n && isPrime(n / i))
                    e[x].add(n / i);
            }
        }
    }

    static void dfs(int y) {
        if (y == X) {
            flag = true;
            min_ = Math.min(min_, sum);
            return;
        }
        for (int i = 0; i < e[y].size(); i++) {
            if (!vis[e[y].get(i)]) {
                sum += e[y].get(i);
                vis[e[y].get(i)] = true;
                dfs(y + 1);
                vis[e[y].get(i)] = false;
                sum -= e[y].get(i);
            }
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();

        for (int i = 0; i < maxn; i++) {
            e[i] = new ArrayList<>();
        }

        X = 0;
        for (int i = 0; i < n; i++) {
            m = scanner.nextInt();
            prime(m, X++);
        }

        min_ = INF;
        dfs(0);

        if (flag)
            System.out.println(min_);
        else
            System.out.println(-1);
    }
}

6. 红和蓝

赛后补题

java">import java.util.Scanner;
import java.util.Arrays;

public class Main {
    static final int N = 2 * 100000 + 10;
    static int[] e = new int[N];
    static int[] h = new int[N];
    static int[] ne = new int[N];
    static int idx;

    static void add(int a, int b) {
        e[idx] = b;
        ne[idx] = h[a];
        h[a] = idx++;
        e[idx] = a;
        ne[idx] = h[b];
        h[b] = idx++;
    }

    static int n;
    static int cnt;
    static int[] colour = new int[N];
    static boolean flag;
    
    static void dfs1(int x, int fa) {
        int son = 0;
        for (int i = h[x]; i != -1; i = ne[i]) {
            int ver = e[i];
            if (ver == fa)
                continue;
            son++;
            dfs1(ver, x);
        }
        if (son == 0 || colour[x] == 0) {
            if (colour[fa] != 0 || fa == 0) {
                flag = true;
                return;
            }
            colour[x] = colour[fa] = ++cnt;
        }
    }

    static int[] clo = new int[N];
    
    static void dfs2(int x, int fa) {
        for (int i = h[x]; i != -1; i = ne[i]) {
            int ver = e[i];
            if (ver == fa)
                continue;
            if (colour[ver] == colour[x])
                clo[ver] = clo[x];
            else
                clo[ver] = clo[x] ^ 1;
            dfs2(ver, x);
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        Arrays.fill(h, -1);
        for (int i = 1; i < n; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            add(x, y);
        }
        dfs1(1, 0);
        if (flag) {
            System.out.println("-1");
            return;
        }
        dfs2(1, 0);
        for (int i = 1; i <= n; i++)
            System.out.print(clo[i] != 0 ? "B" : "R");
    }
}

总结

ACM模式,大部分题目是从牛客题库、寒假训练营抽出来的,DfsDP图论质数筛的混合考察比较多,平时多练习多debug
ACM注意罚时的重要性,考虑一些细节不对,提交报错则罚时严重。
拿到题目,先把题目全部扫一遍,不要一股脑只是做题,应该先把题目先过一遍,确定考点后,由易入难。
确保会的都写对,不会的尝试一下,多debug


http://www.niftyadmin.cn/n/5217049.html

相关文章

MySQL--锁

锁 锁是mysql在并发访问时&#xff0c;解决数据访问一致性、有效性的一种机制 mysq中的锁&#xff0c;按照锁的粒度分&#xff0c;分为以下三类&#xff1a; 全局锁&#xff1a;锁定数据库中的所有表 表级锁&#xff1a;每次操作锁住整张表 行级锁&#xff1a;每次操作锁住对…

【KubeSphere】基于AWS在 Linux 上以 All-in-One 模式安装 KubeSphere

文章目录 一、实验配置说明二、实验准备工作1.确认系统版本2. 修改网络DNS3. 关闭SELINUX4. 关闭防火墙 三、实验依赖项安装四、下载 KubeKey五、一键化安装部署六、验证安装结果七、登录KubeSphere管理控制台八、参考链接 一、实验配置说明 本实验基于AWS启动一台新实例&…

51-58-图论

LeetCode 热题 100 文章目录 LeetCode 热题 100图论51. 中等-全排列52. 中等-子集53. 中等-电话号码的字母组合54. 中等-组合总和55. 中等-括号生成56. 中等-单词搜索57. 中等-分割回文串58. 困难-N皇后 本文存储我刷题的笔记。 图论 51. 中等-全排列 52. 中等-子集 53. 中等…

[NOIP2006]明明的随机数

一、题目 登录—专业IT笔试面试备考平台_牛客网 二、代码 set去重&#xff0c;再利用vector进行排序 std::set是一个自带排序功能的容器&#xff0c;它已经按照一定的规则&#xff08;默认是元素的小于比较&#xff09;对元素进行了排序。因此&#xff0c;你不能直接对std::s…

华为IE题中的QoS题配置案例

要求&#xff1a;保证局域网视频网段流量50M&#xff0c;在链路空闲时可以到100M 1、拥塞避免&#xff1a;根据AF队列的特性&#xff0c;把视频流量放入AF队列并设置为50M带宽&#xff0c;因为AF队列不但可以保证有50M&#xff0c;AF还可以暂用空闲带宽。 2、流量监管&#xf…

第十七周周报-王雲慧

一、Mybatis和JS (一) Mybatis 拦截器 ​ 类似于 Servlet 开发中的过滤器 Filter&#xff0c;用于对处理器进行预处理和后处理 自定义拦截器步骤&#xff1a; ​ 实现接口HandlerInterceptor—>配置拦截器&#xff08;实现WebMvcConfigurer 接口重写addInterceptors注册拦截…

Java魔法解密:HashMap底层机制大揭秘

文章目录 一、 源码深度解析1.1 窥探Java集合框架中的设计思想1.2 逐行解读HashMap的源代码1.2.1 类信息1.2.2 常量属性1.2.3 变量属性1.2.4 节点信息1.2.5 构造方法1.2.6 put方法1.2.6.1 putVal方法1.2.6.2 putTreeVal方法1.2.6.3 tieBreakOrder方法1.2.6.4 treeifyBin方法1.2…

echart一键生成迁徙图

echart_move 介绍 echart迁徙图&#xff0c;选择起点和目的地生成迁徙图 软件架构 html echarts js 使用说明 将文件放到同一目录下打开index.html即可 默认是小飞机图标&#xff0c;如果想修改图标&#xff0c;将图片放到同一目录&#xff0c;如1.svg 代码修改为对应位…