牛客_小白月赛_61

news2025/1/11 20:41:56

传送门

A

在这里插入图片描述
如果不是特意防止溢出了,那么需要用long,否则会一直卡
很普通的写法,超了就 +1, 最后补上一个 1就行
(所以, 这题我wa了8次, 卡了半个小时,就是因为没开 long ! ! !)

package com.csh.A;
/**
 * @author :Changersh
 * @date : 2022/11/18
 */

import java.io.*;
import java.util.*;
import java.lang.*;

public class Main {
    public static void main(String[] args) {
        int n = sc.nextInt();
        int v = sc.nextInt();
        long ans = 0, sum = 0;
        for (int i = 0; i < n; i++) {
            int t = sc.nextInt();
            if (sum + t <= v) sum += t;
            else {
                ans++;
                sum = t;
            }
        }
        out.println(ans + 1);
        out.close();
    }
    static class FastScanner{
        // sc.xxx;
        // out.print();
        // out.flush();
        // out.close();
        BufferedReader br;
        StringTokenizer st;
        public FastScanner(InputStream in) {
            br=new BufferedReader( new InputStreamReader(System.in));
            eat("");
        }
        public void eat(String s) {
            st=new StringTokenizer(s);
        }

        public String nextLine() {
            try {
                return br.readLine();
            }catch(IOException e) {
                return null;
            }
        }

        public boolean hasNext() {
            while(!st.hasMoreTokens()) {
                String s=nextLine();
                if(s==null)return false;
                eat(s);
            }

            return true;
        }

        public String next() {
            hasNext();
            return st.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }

    static FastScanner sc=new FastScanner(System.in);
    static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}

B

在这里插入图片描述
分类讨论, 我可能写繁了
因为范围特别大, 几万位, 所以用 String 接收
然后就是判断一下 小数位的大小, 关键是小数的第一个数字 = 5时, 要分类 :

  1. 真的是 = 5
  2. 50000000000000000000000000000001 还是大于 0.5 的
    我选择搞了一个标准的String是和小数位数相等的, 50000000000000000000000000
// package com.csh.B;
/**
 * @author :Changersh
 * @date : 2022/11/18
 */

import java.io.*;
import java.util.*;
import java.lang.*;

public class Main {
    public static void main(String[] args) {
        String s = sc.next(); String t = sc.next();
        int n = t.length();
        char[] c = new char[n];
        Arrays.fill(c, '0');
        c[0] = '5';
        int a, b;
        if (s.length() == 1) a = Integer.parseInt(s);
        else {
            a = Integer.parseInt(s.substring(s.length() - 2));
        }
        if (t.length() == 1) b = Integer.parseInt(t);
        else {
            String s1 = new String(c);
            if (t.compareTo(s1) > 0) b = 6;
            else if (t.compareTo(s1) == 0) b = 5;
            else b = 4;
        }

        if (b > 5) out.println("Happy birthday to MFGG");
        else if (b < 5 && b > 0) out.println("Happy birthday to YXGG");
        else if (b == 0) {
            out.println("PLMM");
        } else {
            if (a % 2 == 0) {
                if (b == 0) out.println("PLMM");
                else out.println("Happy birthday to YXGG");
            } else {
                out.println("Happy birthday to MFGG");
            }
        }
        out.close();
    }
    static class FastScanner{
        // sc.xxx;
        // out.print();
        // out.flush();
        // out.close();
        BufferedReader br;
        StringTokenizer st;
        public FastScanner(InputStream in) {
            br=new BufferedReader( new InputStreamReader(System.in));
            eat("");
        }
        public void eat(String s) {
            st=new StringTokenizer(s);
        }

        public String nextLine() {
            try {
                return br.readLine();
            }catch(IOException e) {
                return null;
            }
        }

        public boolean hasNext() {
            while(!st.hasMoreTokens()) {
                String s=nextLine();
                if(s==null)return false;
                eat(s);
            }

            return true;
        }

        public String next() {
            hasNext();
            return st.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }

    static FastScanner sc=new FastScanner(System.in);
    static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}

C

在这里插入图片描述
在这里插入图片描述
bfs, 判断有点麻烦,

  1. 先 bfs 得到plmm的所有能移动到的位置, 和距离原位置的距离 (plmm的移动距离有限)
  2. 小猫虽然嗅觉有限, 但是可以无限制移动, 再对小猫做 bfs, 没有限制
  3. 最后遍历, 找到 距离二者最近的点 (人可以到达, 小猫可以到达, 小猫可以闻到的) 的距离和
  4. 找不到返回 -1
// package com.csh.C;
/**
 * @author :Changersh
 * @date : 2022/11/18
 */

import java.io.*;
import java.util.*;
import java.lang.*;

public class Main {
    private static int N = 1005, n, m, r1, r2, x1, x2, y1, y2;
    private static int[] dx = {1, -1, 0, 0}, dy = {0, 0, 1, -1};
    private static char[][] g = new char[N][N];
    private static int[][] per = new int[N][N], cat = new int[N][N];
    public static void main(String[] args) {
        n = sc.nextInt(); m = sc.nextInt(); r1 = sc.nextInt(); r2 = sc.nextInt();
        for (int i = 0; i < n; i++) {
            g[i] = sc.next().toCharArray();
            Arrays.fill(per[i], -1);
            Arrays.fill(cat[i], -1);
        }
        int[] a = find('P');
        x1 = a[0]; y1 = a[1];
        int[] b = find('M');
        x2 = b[0]; y2 = b[1];
        bfs();
        // 确定好距离之后,判断是否能走到猫咪的嗅觉内,并且猫咪能到达的点
        int ans = 20021016;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m ;j++) {
                if ((Math.abs(i - x2) + Math.abs(j - y2)) <= r2 && per[i][j] != -1 && cat[i][j] != -1) {
                    ans = Math.min(per[i][j] + cat[i][j], ans);
                }
            }
        }
        out.println(ans == 20021016 ? -1 : ans);
        out.close();
    }
    private static void bfs() {
        // 人
        for (int[] i : per) Arrays.fill(i, -1); // 初始化距离
        per[x1][y1] = 0;
        LinkedList<int[]> q = new LinkedList<>();
        q.add(new int[]{x1, y1});
        while (!q.isEmpty()) {
            int[] t = q.poll();
            int a = t[0]; int b = t[1];
            for (int i = 0; i < 4; i++) {
                int x = dx[i] +a; int y = dy[i] + b;
                if ( x >= 0 && x < n && y >= 0 && y < m && ((Math.abs(x - x1) + Math.abs(y - y1)) <= r1) && per[x][y] == -1 && g[x][y] != '*') {
                    per[x][y] = per[a][b] + 1;
                    q.add(new int[]{x, y});
                }
            }
        }

        for (int[] i : cat) Arrays.fill(i, -1); // 初始化距离
        cat[x2][y2] = 0;
        LinkedList<int[]> p = new LinkedList<>();
        p.add(new int[]{x2, y2});
        while (!p.isEmpty()) {
            int[] t = p.poll();
            int a = t[0]; int b = t[1];
            for (int i = 0; i < 4; i++) {
                int x = dx[i] +a; int y = dy[i] + b;
                if ( x >= 0 && x < n && y >= 0 && y < m && cat[x][y] == -1 && g[x][y] != '*') {
                    cat[x][y] = cat[a][b] + 1;
                    p.add(new int[]{x, y});
                }
            }
        }
    }
    private static int[] find(char c) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (g[i][j] == c) {
                    return new int[]{i, j};
                }
            }
        }
        return null;
    }

    static class FastScanner{
        // sc.xxx;
        // out.print();
        // out.flush();
        // out.close();
        BufferedReader br;
        StringTokenizer st;
        public FastScanner(InputStream in) {
            br=new BufferedReader( new InputStreamReader(System.in));
            eat("");
        }
        public void eat(String s) {
            st=new StringTokenizer(s);
        }

        public String nextLine() {
            try {
                return br.readLine();
            }catch(IOException e) {
                return null;
            }
        }

        public boolean hasNext() {
            while(!st.hasMoreTokens()) {
                String s=nextLine();
                if(s==null)return false;
                eat(s);
            }

            return true;
        }

        public String next() {
            hasNext();
            return st.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }

    static FastScanner sc=new FastScanner(System.in);
    static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}

E

在这里插入图片描述
因为有地方可能还是会溢出, 所以没过, 大概思路是对的
n个数的所有排列的逆序对 = (n! / 2) * 不相等的数字的对数
/2用乘法逆元来求
不相等数字的对数:
在这里插入图片描述

// package com.csh.E;
/**
 * @author :Changersh
 * @date : 2022/11/20
 */

import java.io.*;
import java.util.*;
import java.lang.*;

public class Main {
    private static final long mod = 1000000000 + 7;
    private static int N = 100005, n;
    private static int[] a = new int[N], cnt = new int[N];

    public static void main(String[] args) {
        n = sc.nextInt();
        long ans = 1; // n!
        for (int i = 0; i < n; i++) {
            int t = sc.nextInt();
            a[i] = t;
            cnt[t]++;
            ans = ((ans % mod) * ((i + 1L) % mod)) % mod;
        }
//        out.println(ans);
        long t = 500000004;
//        out.println(t);
        ans = ((ans % mod) * (t % mod)) % mod; // n! / 2;
        long sum = ((n % mod * (n - 1) % mod) % mod / 2) % mod;
        for (int i = 0; i < 100002; i++) {
            if (cnt[i] > 1) {
                int a = cnt[i];
                sum = (sum - (a * (a - 1)) / 2) % mod;
            }
        }

        sum %= mod;
        out.println((ans * sum) % mod);
        out.close();
    }

    static class FastScanner {
        // sc.xxx;
        // out.print();
        // out.flush();
        // out.close();
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(InputStream in) {
            br = new BufferedReader(new InputStreamReader(System.in));
            eat("");
        }

        public void eat(String s) {
            st = new StringTokenizer(s);
        }

        public String nextLine() {
            try {
                return br.readLine();
            } catch (IOException e) {
                return null;
            }
        }

        public boolean hasNext() {
            while (!st.hasMoreTokens()) {
                String s = nextLine();
                if (s == null) return false;
                eat(s);
            }

            return true;
        }

        public String next() {
            hasNext();
            return st.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }

    static FastScanner sc = new FastScanner(System.in);
    static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day02 springmvc

day02 springmvc 第一章 RESTFul风格交互方式 第一节 RESTFul概述 1. REST的概念 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。 定位&#xff1a;互联网软件架构风格倡导者&#xff1a;Roy Thomas Fielding文献&#xff1a;Roy Thom…

Android源码学习---init

init&#xff0c;是linux系统中用户空间的第一个进程&#xff0c;也是Android系统中用户空间的第一个进程。 位于/system/core/init目录下。 分析init int main(int argc, char **argv) { //设置子进程退出的信号处理函数 sigchld_handler act.sa_handler sigchld_handler;…

【博学谷学习记录】超强总结,用心分享丨人工智能 Python面向对象 学习总结之Python与Java的区别

目录前言简述面向对象类对象特性前言 经过学习&#xff0c;对Python面向对象部分有了一定的了解。 总结记录&#xff1a;面向对象上Python与Java的部分区别 简述 从类、对象、特性三个层面来简述其部分区别 面向对象 类 PythonJava定义class ClassName(object):passpubl…

2000-2020年各省固定资本存量数据

2000-2020年各省资本存量数据 1&#xff1a;来源&#xff1a;统计NJ、各省统计NJ 2、时间&#xff1a;2000-2020年 3、包括&#xff1a;30个省 4、数据说明&#xff1a;含原始数据和计算过程及最终结果 4、指标说明&#xff1a; 参考文献&#xff1a; 单豪杰&#xff08;…

【微服务架构组件之注册中心】注册中心选型-我只选nacos

注册中心的产生是基于用来解耦服务提供者(Provider)与消费者&#xff08;Consumer&#xff09;的关系&#xff0c;分布式设计架构下&#xff0c;众多的服务提供者的数量并不是动态不变的&#xff0c;在传统的静态LB的方案中&#xff0c;无法很好感知这种变化&#xff1b; 在分…

[附源码]java毕业设计网上宠物商店

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

进度条——不仅仅是语言层面上的小程序

文章目录\r和\n进度条完整代码\r和\n 在老式键盘上&#xff0c;回车键是这样的形状 但是该键的功能它不仅仅是回车&#xff0c;而是回车换行&#xff01; 这里需要明白两个概念&#xff1a; 回车&#xff1a;光标移动到当前行的行首 换行&#xff1a;光标移动到当前位置的…

跟艾文学编程《Python基础》Anaconda 安装

作者&#xff1a;艾文&#xff0c;计算机硕士学位&#xff0c;企业内训讲师和金牌面试官&#xff0c;公司资深算法专家&#xff0c;现就职BAT一线大厂。 邮箱&#xff1a;1121025745qq.com 博客&#xff1a;https://edu.csdn.net/lecturer/894?spm1003.2001.3001.4144 内容&am…

原生AJAX

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;微微的猪食小窝 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 微微的猪食小窝 原创 1、AJAX 简介 AJAX 全称为Asynchronous Javascript And XML,就是异步的JS 和 XML. 通过AJAX可以在浏览器中向服务器…

Vue3留言墙项目——主体部分静态、mock

文章目录主体头部主体关键部分小卡片组件创建mock数据以及使用主体头部 主体部分显示的内容&#xff0c;根据头部点击的是留言墙还是照片墙的按钮&#xff0c;显示不同的内容。 将照片墙和留言墙要渲染的数据抽取到一个js中&#xff0c;在导入的Main.vue&#xff08;主体页面&…

[go]汇编ASM简介

文章目录汇编(ASM)寄存器帧指针FP常见指令函数示例生成汇编Go汇编代码主要用于优化和与底层系统交互&#xff0c;并不会像其它的经典汇编代码那样独立运行。汇编(ASM) Go ASM是一种被Go编译器使用的特殊形式的汇编语言&#xff08;伪汇编&#xff09;&#xff0c;它基于Plan9输…

记录一次Powerjob踩的坑(Failed to deserialize message)

一. 问题描述: 在本地开发环境, server端和worker都运行正常. 但是发布到SIT环境(容器)的时候, 服务端却监测不到worker(worker可以找到服务端) 二. 问题表现: 1.服务端看不到Worker信息 2. 服务端日志信息 : Failed to deserialize message from [akka://oms111.111.111…

ECMAScript modules规范示例详解

引言 很多编程语言都有模块这一概念&#xff0c;JavaScript 也不例外&#xff0c;但在 ECMAScript 2015 规范发布之前&#xff0c;JavaScript 没有语言层面的模块语法。模块实际上是一种代码重用机制&#xff0c;要实现代码重用&#xff0c;将不同的功能划分到不同的文件中是必…

pycharm安装并加载编译器,设置背景图片,手把手详细操作

pycharm安装并加载编译器&#xff0c;设置背景图片&#xff0c;手把手详细操作 pycharm社区版&#xff08;免费&#xff09;下载官网 双击安装包&#xff0c;选择安装路径 勾选这两个&#xff0c;其实全不勾也没事 下一步默认就行&#xff0c;点install 安装完成后&#xf…

mimikatz抓取密码实战

必须下载最新版本 Releases gentilkiwi/mimikatz GitHubhttps://github.com/gentilkiwi/mimikatz/releases 有32和64之分&#xff0c;systeminfo查看自己版本 首先我们用后门得到权限&#xff0c;在用getsystem提权&#xff0c;因为mimikatz要system权限&#xff0c;getuid…

Python基础-1-环境搭建(初体验)

一&#xff1a;开发环境 Linux-5.15.0&#xff08;Ubuntu22.04&#xff09; 二&#xff1a;安装Python3 1、安装&#xff1a;sudo apt-get install python3 2、版本查询&#xff1a; python3 --version python3进入python解释器也可查询对应版本&#xff0c;按CtrlD或执行…

力扣(LeetCode)20. 有效的括号(C++)

栈模拟 一次遍历字符串 sss &#xff0c; 遇到左括号则入栈&#xff0c;遇到右括号则匹配栈顶。如果右括号匹配成功 &#xff0c; 栈顶元素弹栈 &#xff0c; 匹配不成功 &#xff0c; 则 returnfalsereturn\ \ falsereturn false 。 提示 : 当遍历完所有字符&#xff0c;记…

【计算机网络】扩展以太网方法总结

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录物理层扩展以太网链路层扩展以太网网桥网桥分类透明网桥源路由网桥多接口网桥----以太网交换机直通式交换机存储转发式交换机冲突域与广播域&#x1f343;博主昵称&#xff1a;一拳必胜客 &#x1f338;博主…

LinkedList详解

介绍 众所周知ArrayList底层数据结构是数组&#xff0c;但是数组有个缺点&#xff0c;虽然查询快&#xff0c;但是增删改会慢因为数组是在连续的位置上面储存对象的应用。当我们删除某一个元素的时候在他后面的元素的索引都会左移&#xff0c;导致开销会很大。所以LinkedList应…

Linux系统下交叉编译工具的安装实现

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;如何使用Linux系统下的交叉编译工具链的方法。 目录 第一:交叉编译工具链基本简介 ​第二&#xff1a;交叉编译工具安装方法 ​第三&#xff1a;安装相关库 ​第四&#xff1a;交叉编译工具验证 第一:交叉编译工具链基…