牛客周赛 Round 6 解题报告 | 珂学家 | 数学场

news2024/11/17 21:21:07

前言

alt

一切都是命运的安排。


整体评价

这场整体感觉有点简单,D题感觉不错,E题应该是超纲了。整场还是偏数学,个人还是喜欢Round 4/Round 5.


A. 游游的数字圈

简单模拟题

  • 0,6,9对应一个圆圈
  • 8对应2个圆圈
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        char[] str = sc.next().toCharArray();
        int ans = 0;
        for (char c: str) {
            int p = c - '0';
            if (p == 0 || p == 6 || p == 9) ans++;
            else if (p == 8) ans += 2;
        }
        System.out.println(ans);
    }

}
#include <bits/stdc++.h>

using namespace std;

int main() {
    
    string s;
    cin >> s;
    int res = 0;
    for (char c: s) {
        if (c == '0') res += 1;
        else if (c=='6') res += 1;
        else if (c == '8') res+= 2;
        else if (c == '9') res+= 1;
    }
    cout << res << endl;
    return 0;
}

B. 竖式乘法

阅读题吧,

就是b的每个位数乘以a的累计和

import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));

        int kase = sc.nextInt();
        while (kase-- > 0) {
            long a = sc.nextInt();
            long b = sc.nextInt();

            long ans = 0;
            while (b > 0) {
                long t = b % 10;
                ans += a * t;
                b /= 10;
            }
            System.out.println(ans);
        }
    }

}

C. 游游的数值距离

这题还是稍有点头痛的

化简公式 ∣ x ! × y − y − n ∣ |x!\times y - y - n| x!×yyn 等价于 ∣ ( x ! − 1 ) ∗ y − n ∣ |(x! - 1) * y - n| (x!1)yn

求这个绝对值最小化时的,x,y值

由于n固定,那如何求解x,y呢?

可以发现x!膨胀非常的快,所以可以从x枚举入手

然后反解y值,因为是绝对值

所以 y ∈ { n / ( x ! − 1 ) , ( n + x ! − 2 ) / ( x ! − 1 ) } y\in \{ n/(x! - 1), (n+x!-2)/(x! - 1) \} y{n/(x!1),(n+x!2)/(x!1)}

当然这题还有额外的限制,就是x,y都不能等于2,且为正整数

关键还是找对切入点

import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));

        long n = sc.nextInt();
        long diff = Long.MAX_VALUE;
        long tx = 0, ty = 0;

        // 枚举x就行
        long x = 1l;
        for (int i = 1; x - 1 <= n; i++) {
            x = x * i;

            if (i == 1) {
                // 1 要 特判
                if (diff > n) {
                    diff = n;
                    tx = 1; ty = 1;
                }
            }

            if (x > 1 && i != 2) {
                long y1 = n / (x - 1);
                long y2 = (n + x - 2) / (x - 1);

                if (y1 != 2 && y1 > 0) {
                    long t = Math.abs((x - 1) * y1 - n);
                    if (diff > t) {
                        diff = t;
                        tx = i;
                        ty = y1;
                    }
                }
                if (y2 != 2 && y2 > 0) {
                    long t2 = Math.abs((x - 1) * y2 - n);
                    if (diff > t2) {
                        diff = t2;
                        tx = i;
                        ty = y2;
                    }
                }
            }
        }
        System.out.println(tx + " " + ty);
    }
    
}

D. 游游的k-好数组

这题其实有点意思,但是如果找对正确的切入点,那这题还是蛮简单的。

因为最终所有的k长度的区间,其区间和相等.

比如 [ a 1 , a 2 , . . . , a k ] , [ a 2 , a 3 , . . . a k , a k + 1 ] [a_1, a_2, ..., a_k], [a_2,a_3,...a_k,a_{k+1}] [a1,a2,...,ak],[a2,a3,...ak,ak+1]

可以推导出 a 1 = = a k + 1 a_1 == a_{k+1} a1==ak+1

从中我们可以推导出按取模k,进行分组

每组中元素必须相等

可以先按必须的给予操作(从x中获得)

如果最终的操作数 大于 x,则无解

如果小于等于, 则剩余x,可以贪心给予某一组,从而求解最大值。

import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));

        int kase = sc.nextInt();
        while (kase-- > 0) {
            int n = sc.nextInt(), k = sc.nextInt(), x = sc.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }

            // 进行分组
            long[] last = new long[k];
            List<Integer>[]g = new List[k];
            Arrays.setAll(g, t -> new ArrayList<>());
            for (int i = 0; i < n; i++) {
                g[i % k].add(arr[i]);
            }

            for (int i = 0; i < k; i++) {
                long mv = g[i].get(0);
                for (long v: g[i]) {
                    mv = Math.max(mv, v);
                }
                last[i] = mv;
                for (int j = 0; j < g[i].size(); j++) {
                    x -= (mv - g[i].get(j));
                }
            }

            if (x < 0) {
                System.out.println(-1);
            } else {
                long ans = 0;
                for (int i = 0; i < k; i++) {
                    ans = Math.max(ans, last[i] + x / g[i].size());
                }
                System.out.println(ans);
            }
        }

    }

}

E. 小红的循环节长度

这题应该超纲了

我大概知道的知识点是, 如果除数只有2,5的因子,则一定是有限个数的有理数,否则存在循环节。

这是知乎上的一个讨论

大概意思为,混合小数中,不循环部分和2,5因子有关,循环节则和q的欧拉函数因子有关

特别要注意,求快速幂时,因为模数超过int范围,则两个long相乘会直接溢出,因为需要int128,当然java需用大数类。

import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    static long gcd(long a, long b) {
        return b == 0 ? a : gcd(b, a % b);
    }

    static long phi(long v) {
        long r = v;
        for (long i = 2; i <= v/i; i++) {
            if (v % i == 0) {
                r = r / i * (i - 1);
                while (v % i == 0) v /= i;
            }
        }
        if (v > 1) r = r / v * (v - 1);
        return r;
    }

    // 这边需要特别注意,要用大数,因为q这个模数超过int, long * long 会溢出
    static long ksm(long b, long v, long q) {
        BigInteger bigQ = BigInteger.valueOf(q);
        BigInteger r = BigInteger.valueOf(1l);
        BigInteger base = BigInteger.valueOf(b).mod(bigQ);
        while (v > 0) {
            if (v % 2 == 1) {
               r = r.multiply(base).mod(bigQ);
            }
            v /= 2;
            base = base.multiply(base).mod(bigQ);
        }
        return r.mod(bigQ).longValue();
    }

    public static void main(String[] args) {

        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        long p = sc.nextLong(), q = sc.nextLong();

        long gv = gcd(p, q);
        q /= gv;

        int cnt2 = 0, cnt5 = 0;
        while (q % 2 == 0) { q /= 2; cnt2++; }
        while (q % 5 == 0) { q /= 5; cnt5++; }

        if (q == 1) {
            System.out.println(-1);
        } else {
            long ans = Long.MAX_VALUE;
            long nq = phi(q);
            for (long i = 1; i <= nq / i; i++) {
                if (nq % i == 0) {
                    if (ksm(10, i, q) == 1) ans = Math.min(ans, i);
                    if (ksm(10, nq / i, q) == 1) ans = Math.min(ans, nq / i);
                }
            }
            System.out.println("" + Math.max(cnt2, cnt5) + " " + ans);
        }
    }

}


写在最后

不辅助就只能回去继承家业了。

alt

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

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

相关文章

spring-boot集成mybait-plus+shareding实现分表分库,dynamic动态数据多数据源

spring-boot集成mybait-plusshareding实现分表分库&#xff0c;多数据源 1. Spring-boot集成shareding Mybatis-plus依赖引用yaml 配置示例 2. 引用 dynamic实现分表动态数据源依赖引用yaml配置数据源注入配置示例 说明&#xff1a; 以下内容为两部分&#xff1a; …

黑马苍穹外卖学习Day7

文章目录 缓存菜品实现思路代码开发 缓存套餐Spring Cache入门案例实现思路代码开发 添加购物车需求分析和设计代码开发 查看购物车需求分析代码开发 清空购物车需求分析代码实现 缓存菜品 实现思路 代码开发 Controller层 RestController("userDishController") …

C# new Thread和Task.Run,多线程(Thread和Task)

一、开启多线程-new Thread的使用 示例一 Thread thread25yi new Thread(new ThreadStart(obj.MethodTimer1)); thread25yi.Start(); void MethodTimer1() { while (true) { Console.WriteLine(DateTime.Now.ToString() "_" thread25yi.CurrentThread.Managed…

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问 前言1、创建仓库2、开启 gh-pages页面功能3、访问测试 前言 写博客文章时&#xff0c;图片的上传和存放是一个问题&#xff0c;使用小众第三方图床&#xff0c;怕不稳定和倒闭&…

【SpringMVC】常用注解(续)

在SpringMVC常用注解一文中&#xff0c;已经对一些基本注解&#xff08;有Controller、RequestMapping、ResponseBody、RequestParam&#xff09;进行了简单介绍&#xff1b;在此篇文章中&#xff0c;将继续对剩余的几个常用注解进行简单介绍&#xff0c;有RequestBody、PathVa…

测试平台出问题?看我20分钟快速定位!

今天遇到一个问题&#xff0c;感觉挺有意思&#xff0c;处理过程也非常有意义&#xff0c;希望能给大家一个借鉴吧。今天一位小姐姐找到了我们大组长&#xff0c;说测试平台添加自动化测试用例失败&#xff0c;之后我们组长把我拉到了一个群里让我去看一下&#xff0c;硬着头皮…

uniapp 简易自定义日历

1、组件代码 gy-calendar-self.vue <template><view class"calendar"><view class"selsct-date">请选择预约日期</view><!-- 日历头部&#xff0c;显示星期 --><view class"weekdays"><view v-for"…

k8s存储卷-动态PV

pv和PVC&#xff0c;存储卷&#xff1a; 存储卷&#xff1a; EmptyDir&#xff1a;容器内部&#xff0c;随着pod销毁&#xff0c;emptyDir也会消失&#xff0c;不能做数据持久化 HostPath&#xff1a;持久化存储数据&#xff0c;可以和节点上目录做挂载&#xff0c;pod被销毁…

vue el-table 多选框回填

主要代码: //选中列&#xff0c;所有列&#xff0c;表名toggleSelection(selectRows, totalRows, tablename) {this.$refs.table.clearSelection();if (selectRows.length > 0) {this.$nextTick(() > {selectRows.forEach(item > {totalRows.forEach(item1 > {if (…

PyTorch常用操作

0. 先决条件 安装驱动、CUDA、cuDNN&#xff0c;请参考&#xff1a;https://blog.csdn.net/liugan528/article/details/128974129 import torch print(torch.__version__)#查看gpu是否可用 print(torch.cuda.is_available())#查看设备gpu个数 print(torch.cuda.device_count(…

数据结构学习 jz29 顺时针打印矩阵

关键词&#xff1a;模拟 题目&#xff1a;螺旋遍历二维数组 简单题做了超过40分钟 调了很久 不好 方法一&#xff1a; 我自己做的。 思路&#xff1a; xy_t&#xff1a; 记录xy的方向&#xff0c;往右走&#xff0c;往下走&#xff0c;往左走&#xff0c;往上走 t控制方…

Jupyter Notebook

2017年左右在大学里都听说过Jupyter Notebook&#xff0c;并且也安装用了一段时间&#xff0c;后来不知道什么原因没有用了。估计是那时候写代码的时候多一些&#xff0c;因为它可以直接写代码并运行结果&#xff0c;现在不怎么写代码了。 介绍 后缀名为.ipynb的json格式文件…

105、Zero-1-to-3: Zero-shot One Image to 3D Object

简介 官网  使用合成数据集来学习相对摄像机视点的控制&#xff0c;这允许在指定的摄像机变换下生成相同对象的新图像&#xff0c;用于从单个图像进行三维重建的任务。 实现流程 输入图像 x ∈ R H W 3 x \in \R^{H \times W \times 3} x∈RHW3&#xff0c;所需视点的相…

PyTorch——torchtext与PyTorch匹配的版本

一、匹配版本的对照表 二、按照对应版本的命令 例子&#xff1a; pip install torchtext0.9.1参考资料&#xff1a; Torchtext and PyTorch s Version Compatibility

云联惠 被查 消费积分合法化!——全新消费返利模式!共享购!

大家好 我是吴军 一家软件开发公司的产品经理 今天讲一讲&#xff0c;曾经盛极一时的云联惠&#xff0c;巅峰时期达到一千万的用户&#xff0c;资金6000亿。 前几年云联惠如火如荼&#xff0c;到处都是在宣传云联惠的&#xff0c;小编也略玩了一下下。 当时因为政策的不明朗…

SpringBoot:详解依赖注入和使用配置文件

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、&#x1f3…

【软件工程】《软件工程》期末复习提纲

《软件工程》期末复习提纲 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章 第十二章 第十三章 第十四章 小题参考 大题参考 《软件工程》期末复习提纲 第一章 1.在下列选项中&#xff0c;&#xff08; &#xff09;不是软…

10.9.2 std::function 代替函数指针 Page182~183

std::function是一个模板类&#xff0c;基本可作为函数指针的代替品&#xff0c;具备更多功能&#xff0c;特别是与函数对象及bind配合使用。使用std::function时&#xff0c;需要添加头文件 #include <functional> 1.定义函数指针 18行&#xff0c;定义了一个函数指针类…

Linux常用命令大全(三)

系统权限 用户组 1. 创建组groupadd 组名 2. 删除组groupdel 组名 3. 查找系统中的组cat /etc/group | grep -n “组名”说明&#xff1a;系统每个组信息都会被存放在/etc/group的文件中1. 创建用户useradd -g 组名 用户名 2. 设置密码passwd 用户名 3. 查找系统账户说明&am…

多模型图像特征可视化

特征图可视化是指将网络中某一层的特征图可视化出来&#xff0c;以便观察网络在不同层次上学到的特征。卷积可视化可以帮助深度学习研究者更好地理解卷积的概念和原理&#xff0c;从而更好地设计和优化卷积神经网络。通过可视化&#xff0c;研究者可以更清晰地看到卷积运算中的…