牛客周赛 Round 6

news2025/5/18 19:21:47

A 游游的数字圈

在这里插入图片描述

题目大意

给定一个由数字字符组成的字符串,统计该字符串中出现的圆圈数量。其中数字0、6、9各有一个圆圈,数字8有两个圆圈。

思路分析

遍历字符串中的每个字符,对于每个字符,判断其是0、6、9则加1,是8则加2

时间复杂度

O(n)

AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s; 
    int cnt=0; 
    for(char c:s) 
    {
        if(c=='0'||c=='6'||c=='9'){
            cnt++;
        }else if(c=='8'){
            cnt+=2;
        }
    }
    cout<<cnt<<endl; 
    return 0;
}

B 竖式乘法

在这里插入图片描述在这里插入图片描述

题目大意

按照游游的竖式乘法计算a乘以b的值,并输出结果。

思路分析

游游给出的竖式乘法是一种按位相乘并相加的方法。对于每个位上的数,将a与b的对应位相乘,并将结果累加得到最终答案。

时间复杂度

O(t*m)

AC代码

#include<bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int t;
    cin >> t;
    while(t--) {
        int a;
        string b;
        cin >> a >> b;
        long long res = 0;
        for(char c : b) {
            res += a * (c - '0');
        }
        cout << res << endl;
    }
    return 0;
}

C 游游的数值距离

在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

给定一个正整数n,找到一对正整数x和y,使得|x! × y - y - n|最小,并且x和y不能等于2。

思路分析

把式子整理一下可知,题目要求找到一个正整数x和一个正整数y,使得(x!-1)*y与输入的n的差值最小。知n,可以枚举x,因为x!会很大,算到15!左右即可。剩下一个未知数y,对于每个x,我们计算出y的三种可能取值:y=n/(x!-1),y=n/(x!-1)+1,y=n/(x!-1)-1。
因为题目要求使得(x!-1)*y与输入的n的差值最小。

  • 在整数除法中,n/(x!-1) 已经是最小的可能值了。如果我们再减去1,那么 (x!-1)*(y-1) 的值会比 n 小得更多,这会使得 |x!×y-y-n| 的值变大,而不是变小。
    所以只需要考虑 y=n/(x!-1) 和 y=n/(x!-1)+1 因为 y=n/(x!-1) 是 y 的最小可能值,而 y=n/(x!-1)+1 则是使得 (p-1)*y 的值刚好大于 n 的最小 y 值。所以只有这两种情况都可能使得 |x!×y-y-n| 的值最小。

时间复杂度

O(1)

AC代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
    int n;
    cin >> n;
    int p = 2, x = 1, y = 1, ans = n;
    for(int i = 3; i <= 15; i++)
    {
        p *= i; 
        int y1 = n / (p - 1); // 计算商y1
        if(abs((p - 1) * y1 - n) < ans && y1 != 2)
            x = i, y = y1, ans = abs((p - 1) * y1 - n);
        if(abs((p - 1) * (y1 + 1) - n) < ans && y1 + 1 != 2)
            x = i, y = y1 + 1, ans = abs((p - 1) * (y1 + 1) - n);
    }
    cout << x << ' ' << y << endl;
    return 0;
}

D 游游的k-好数组

在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

游游想要将一个大小为n的数组变成k-好数组,并且进行不超过x次操作。要求变换后的数组的最大值尽可能大。

思路分析

每个区间,滑动窗口每加一个t[i%k],就要减一个t[i%k],所以加和减要相等。记录每组元素中最大的元素为t[i%k]。

  • 首先,可以将数组按照k的大小进行分组,每组的元素个数为n/k(如果n不能被k整除,那么前n%k组的元素个数为n/k+1)。
  • 然后,计算每组的最大元素,并记录下来。同时,我们也计算出将每个元素变为其所在组的最大元素需要的操作次数,并累加起来。
  • 如果累加的操作次数大于x,那么说明无法在不超过x次操作的情况下使得数组变为k-好数组,输出-1。
  • 如果累加的操作次数小于等于x,那么我们可以继续增大每组的最大元素。将剩余的操作次数平均分配给每组,然后将每组的最大元素增大相应的值。
  • 最后,数组的最大值就是所有组的最大元素中的最大值。

时间复杂度

O(n)

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],t[N];
void solve()
{
    memset(t,0,sizeof t);
    int n,k,x;
    cin>>n>>k>>x;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        t[i%k]=max(t[i%k],a[i]);
    }
    int cn=0;
    for(int i=0;i<n;i++)
    {
        cn+=t[i%k]-a[i];
    }if(x<cn)
    {
        cout<<-1<<"\n";
        return;;
    }
    x-=cn;
    int ans=0;
    for(int i=0;i<k;i++)
    {
        int rest=n/k+(i<n%k);
        ans=max(ans,t[i]+x/rest);
    }
    cout<<ans<<"\n";
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}

E 小红的循环节长度

在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

小红想知道一个分数的循环节前面部分的长度以及循环节的长度。给定两个正整数p和q,代表分子和分母。要求输出循环节前面部分的长度和循环节的长度。

思路分析

根据数学原理,一个分数可以表示为有限小数或无限循环小数。对于无限循环小数而言,循环节是必然存在的。通过欧拉函数和模运算,可以计算出循环节的长度。同时,通过化简分母为最简形式以及判断分数是否为有限小数,可以提前排除掉一部分情况,减少计算量。

  • 首先判断给定的分数是否为有限小数。如果分母能够被2或5整除,则说明分数是有限小数,直接输出-1。
  • 将分母化简为最简形式,并计算分母中包含2和5的个数,用c2和c5表示。
  • 计算欧拉函数phi(q),得到与q互质的小于等于q的正整数个数。
  • 遍历phi(q)的所有因子i,判断10i和10(phi(q)/i)在模q下是否为1,如果是则更新循环节长度mi为i或phi(q)/i的较小值。
  • 输出max(c2, c5)作为循环节前面部分的长度,输出mi作为循环节的长度。

所用到的知识点和算法:

  • 欧拉函数:用于计算与给定正整数互质的小于等于它的正整数个数。
  • 快速幂算法:用于快速计算一个数的指定次幂,降低时间复杂度。
  • 最大公约数:用于化简分数为最简形式。
  • 模运算:用于判断10i和10(phi(q)/i)在模q下是否等于1。

时间复杂度

O(sqrt(q) * sqrt(phi(q)) * log(q))

AC代码

#include<bits/stdc++.h>
#define int long long
using namespace std;

// 欧拉函数
int phi(int x) {
    int res = x;
    for (int i = 2; i <= x / i; i++) {
        if (x % i == 0) {
            res = res / i * (i - 1);
            while (x % i == 0) x /= i;
        }
    }
    if (x > 0) res = res / x * (x - 1);
    return res;
}

// 快速幂模运算
int qmi(int a, int k,int p) {
    __int128 res = 1;
    while (k)
    {
        if (k & 1) res =(__int128) res * a%p;
        a = (__int128)a*a%p;
        k >>= 1;
    }
    return res;
}

// 求最大公约数
int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

void solve() {
    int p, q;
    cin >> p >> q;
    
    // 约分并计算分母中包含的因子个数
    q /= gcd(p, q);
    int c2 = 0, c5 = 0;
    while (q % 2 == 0) q /= 2, c2++;
    while (q % 5 == 0) q /= 5, c5++;

    // 判断是否为有限小数
    if (q == 1) {
        cout << -1;
        return;
    }

    // 求解循环节前面部分长度和循环节长度
    int te= phi(q);
    int mi = 1e18;
    for (int i = 1; i <= te/ i; i++) {
        if (te% i == 0) {
            if (qmi(10, i, q) == 1)mi = min(mi, i);
            if (qmi(10, te/ i, q) == 1) mi = min(mi, te/ i);
        }
    }
    
    cout << max(c2, c5) << ' ' << mi;
}

signed main() {
    solve();
    return 0;
}

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

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

相关文章

网络安全--mysql中事务锁以及事务隔离解析

一、事务锁 1、个人理解&#xff1a; 专一性和历史性&#xff0c;例如一个男人历史上是花心的&#xff0c;但当他成长后开启begin和update后变的专一了&#xff0c;多项事务也影响不到他了&#xff0c;直到水泥封心&#xff0c;只可被一个人查询在此我们进入正题&#xff1a;…

【代码】表格封装 + 高级查询 + 搜索 +分页器 (极简)

一、标题 查询条件按钮&#xff08;Header&#xff09; <!-- Header 标题搜索栏 --> <template><div><div class"header"><div class"h-left"><div class"title"><div class"desc-test">…

《动手学深度学习》优化算法学习习题

优化算法 梯度下降类 小批量随机梯度下降&#xff0c;通过平均梯度来减小方差 动量法 基础 泄露平均法&#xff1a;用来取代梯度的计算 β \beta β这个参数控制了取多久时间的平均值 上述推理构成了”加速”梯度方法的基础&#xff0c;例如具有动量的梯度。 在优化问题…

SpringMVC的架构有什么优势?——视图与模型(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Codeforces Round 891 (Div. 3)

Array ColoringArray Coloring 题目大意 题目要求判断是否可以将数组元素分为两种颜色&#xff0c;使得两种颜色元素的和具有相同的奇偶性&#xff0c;并且每种颜色至少有一个元素被着色。 思路分析 可以通过统计数组中奇数和偶数的个数来判断是否满足条件。分析可知&#x…

论文阅读---《Unsupervised ECG Analysis: A Review》

题目 无监督心电图分析一综述 摘要 电心图&#xff08;ECG&#xff09;是检测异常心脏状况的黄金标准技术。自动检测心电图异常有助于临床医生分析心脏监护仪每天产生的大量数据。由于用于训练监督式机器学习模型的带有心脏病专家标签的异常心电图样本数量有限&#xff0c;对…

Redis BitMap/HyperLogLog/GEO/布隆过滤器案例

面试问题&#xff1a; 抖音电商直播&#xff0c;主播介绍的商品有评论&#xff0c;1个商品对应了1系列的评论&#xff0c;排序展现取前10条记录用户在手机App上的签到打卡信息&#xff1a;1天对应1系列用户的签到记录&#xff0c;新浪微博、钉钉打卡签到&#xff0c;来没来如何…

模拟实现消息队列项目(系列7) -- 实现BrokerServer

目录 前言 1. 创建BrokerServer类 1.1 启动服务器 1.2 停止服务器 1.3 处理一个客户端的连接 1.3.1 解析请求得到Request对象 1.3.2 根据请求计算响应 1.3.3 将响应写回给客户端 1.3.4 遍历Session的哈希表,把断开的Socket对象的键值对进行删除 2. 处理订阅消息请求详解(补充) …

树、森林 与 二叉树

树、森林 与 二叉树 树结构树结构的基本概念根节点子节点父节点叶节点兄弟节点子树深度高度 树结构的特点二叉树森林查找与遍历方法查找深度优先搜索广度优先搜索 遍历前序遍历中序遍历后序遍历 应用场景 树结构 树结构是一种非常常见且重要的数据结构&#xff0c;它模拟了自然…

中间件RabbitMQ消息队列介绍

1. MQ的相关概念 1.1 什么是MQ MQ&#xff08;message queue&#xff09;&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中存放的内容是message而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息…

Python Opencv实践 - 在图像上绘制图形

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png") print(img.shape)plt.imshow(img[:,:,::-1])#画直线 #cv.line(img,start,end,color,thickness) #参考资料&#xff1a;https://blog.csdn.ne…

【NLP】深入浅出全面回顾注意力机制

深入浅出全面回顾注意力机制 1. 注意力机制概述2. 举个例子&#xff1a;使用PyTorch带注意力机制的Encoder-Decoder模型3. Transformer架构回顾3.1 Transformer的顶层设计3.2 Encoder与Decoder的输入3.3 高并发长记忆的实现self-attention的矩阵计算形式多头注意力&#xff08;…

三次握手与四次挥手 tcp协议特点 tcp状态转移图 TIME_WAIT 抓包

讲解 三次握手图示理解讲解 四次挥手图示理解理解 tcp协议特点tcp状态转移过程总图四次挥手状态转移过程三次挥手状态转移过程 TIME_WAIT状态存在的原因连接状态的一个测试一个面试题&#xff1a;抓包&#xff1a; 三次握手 图示理解 三次握手发生在客户端执行 connect()的时…

elfk

1. 2. ​​​​​​​ 3. 4. 5.

UML—浅谈常用九种图

目录 概述: 1.用例图 2.静态图 3.行为图&#xff1a; 4.交互图&#xff1a; 5.实现图&#xff1a; 概述: UML的视图是由九种视图组成的&#xff0c;分别是用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、实施图。我们可以根据这9种图的功能和实现的目的…

redis是单线程的,那么他是怎么样避免阻塞的

Redis 实例有哪些阻塞点&#xff1f; Redis 实例在运行时&#xff0c;要和许多对象进行交互&#xff0c;这些不同的交互就会涉及不同的操作&#xff0c;下 面我们来看看和 Redis 实例交互的对象&#xff0c;以及交互时会发生的操作。 客户端&#xff1a;网络 IO&#xff0c;键…

springboot scheduling实现定时任务

文章目录 springboot实现定时任务开启springboot定时任务原因分析&#xff1a; 配置线程池&#xff0c;让定时任务指定并发执行先要线程异步执行springboot异步线程池设置指定线程池执行任务 springboot实现定时任务 开启springboot定时任务 springboot实现定时任务很简单&am…

Zebec Protocol 将进军尼泊尔市场,通过 Zebec Card 推动地区金融平等

流支付正在成为一种全新的支付形态&#xff0c;Zebec Protocol 作为流支付的主要推崇者&#xff0c;正在积极的推动该支付方案向更广泛的应用场景拓展。目前&#xff0c;Zebec Protocol 成功的将流支付应用在薪酬支付领域&#xff0c;并通过收购 WageLink 将其纳入旗下&#xf…

学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

前 言 前几篇文章介绍了 pytest 点的基本使用&#xff0c;学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求。从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数&#xff0c;插件开发等等。仔细去看过 pytest 文档的小伙伴&#xff0c;应该都有发现…

内容创作创新技术-147seo采集工具

对于企业和个人来说&#xff0c;内容创作是推广和营销的重要手段。然而&#xff0c;手动撰写大量原创内容不仅费时费力&#xff0c;也有可能陷入创作的瓶颈。面对这一挑战&#xff0c;147采集图文自动改写原创发布应运而生。 147采集图文自动改写原创发布是一款专业、高效的工具…