牛客周赛66

【牛客算法】小苯的数字权值 题目要求计算给定整数x的权值,权值定义为将其拆分成若干个数乘积后,各个数的约数个数之和的最大值。解法采用质因数分解方法,分别计算不拆分时的约数个数(sum)和拆分后的约数个数之和(splitSum),取较大值作为结果。时间复杂度为O(T√x),空间复杂度O(1)。 约数个数定理指出,若n分解为质因数乘积,其约数个数为各质因数指数加1的乘积。该定理通过质因数分解和乘法原理简化了约数计算,在数论和算法中应用广泛。 阅读详情

(https://ac.nowcoder.com/acm/contest/93847)(比赛链接)

目录

A.小苯吃糖果

B.小苯的排列构造

C.小苯的最小整数

D.小苯的蓄水池(easy)

E.小苯的蓄水池(hard)

F.小苯的字符提前


A.小苯吃糖果

1.思路

        最大的值和剩下的两个值的和比较,取较大的那个输出即可

2.代码

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

signed main(){
    int x,y,z;
    cin>>x>>y>>z;
    int sum = x+y+z;
    int max1 = max(x,y);
    max1 = max(max1,z);
    if(max1>sum-max1){
        cout<<max1<<endl;
    }else{
        cout<<sum-max1<<endl;
    }
    return 0;
}

B.小苯的排列构造

1.思路

        输出长度为n,首项为n,公差为1的递减序列即可

2.代码

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

void solve(){
    int n;
    cin>>n;
    for(int i=n;i>=1;i--){
        cout<<i<<" ";
    }
    cout<<endl;
}

signed main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}

C.小苯的最小整数

1.思路

        通过字符串进行输入,将所有情况都遍历,进行比大小,不断更新最小值。因为数值比较大,将字符串转化为长整型的时候选择用stoll函数进行转化,这里的LLONG_MAX是长整型最大值

2.代码

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

void solve(){
    string s;
    cin>>s;
    int min1 = LLONG_MAX;
    for(int i=0;i<s.length();i++){
        string re = s.substr(i+1,s.length());
        re += s.substr(0,i+1);
        int tt = stoll(re);
        min1 = min(min1,tt);
    }
    cout<<min1<<endl;
}

// 4562827
// 2827456
// 2745628

signed main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}

D.小苯的蓄水池(easy)

1.思路

        数组a保存原始数据,数组b保存更新的结果。利用vis数组来判断某个位置是否更新过,因此对于每次更新操作,通过利用vis数组,来找到受到影响的区间,并通过累加这个区间和,除以平均数,然后对受到影响的这个区间都进行更新,将更新的结果保存在b数组中。对于每次查询,输出b[i]即可

2.代码

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

const int N = 2e3+7;
double a[N],b[N];
int vis[N];

void solve(int n){
    int op;
    cin>>op;
    if(op==1){
        int l,r;
        cin>>l>>r;
        double sum = 0;
        int count = 0;
        int left=l,right=r;
        for(int i=l;i>=1;i--){
            if(vis[i]==1){
                left = i;
            }else{
                break;
            }
        }
        for(int i=r;r<=n;i++){
            if(vis[i]==1){
                right = i;
            }else{
                break;
            }
        }
        for(int i=left;i<=right;i++){
            sum+=a[i];
            count++;
        }
        sum/=count;
        for(int i=left;i<=right;i++){
            b[i] = sum;
            vis[i] = 1;
        }
    }else if(op==2){
        int i;
        cin>>i;
        printf("%.10lf\n",b[i]);
    }
}

signed main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        double t;
        cin>>t;
        a[i] = t;
        b[i] = t;
    }
    while(m--){
        solve(n);
    }
}

E.小苯的蓄水池(hard)

1.思路

        利用并查集对合并的区域进行维护,每次拆除挡板时,都向右进行合并,并将所有合并的区域的数值都存在最右边的那个父亲节点上,包括区间的长度。查询时,直接寻找其父亲节点,进行输出即可

2.代码

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

const int N = 2e5+7;
double a[N],fa[N],sz[N];    // a[i]表示合并的区段和,fa[i]表示i的父亲节点,sz[i]表示合并的区段长度

int find(int x){    // 查找父亲节点
    if(fa[x]!=x){   // 如果自身不是自己的父亲则递归查找父亲节点,同时更改自己的父亲为对应的节点
        return fa[x] = find(fa[x]);
    }else{
        return x;   // 自身是自己的父亲,直接返回即可
    }
}

void merge(int l, int r){
    int u = find(l);    // 查找所要合并的两个水池的父亲节点
    int v = find(r);
    if(u==v){       // 相同直接退出
        return ;
    }
    if(v<u){        // 保证向大的值,即右侧进行合并
        swap(v,u);
    }
    a[v]+=a[u];     // 区段和累计
    sz[v]+=sz[u];   // 区段长度累计
    fa[u] = v;      // 合并,更新父亲节点
}

void solve(){
    int op;
    cin>>op;
    if(op==1){
        int l,r;
        cin>>l>>r;
        while(l<r){
            merge(l,l+1);   // 区间合并
            l = find(l);    // l能直接跳转到其父亲的位置,因为之间的位置一定是合并过的
        }
    }else if(op==2){
        int i;
        cin>>i;
        int fa = find(i);   
        printf("%.10lf",a[fa]/sz[fa]);
    }
}

signed main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        fa[i] = i;  // 默认每个水池位置自己都是自己的父亲
        sz[i] = 1;  // 默认每个区段长度都为1
    }
    while(m--){
        solve();
    }
}

3.官方题目讲解(本周官方题解讲解的很好很详细,强烈建议去看看!)https://www.bilibili.com/video/BV1o3S2YREhu?spm_id_from=333.788.videopod.episodes&vd_source=b0cde2c7518af1c65116188091dadb6d&p=3icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1o3S2YREhu?spm_id_from=333.788.videopod.episodes&vd_source=b0cde2c7518af1c65116188091dadb6d&p=3

F.小苯的字符提前

1.思路

        首先确定第k小的Move串的首字符为什么(如b),遍历字符串,统计每个字符的数量,从小到大进行累计,若小于k说明不在当前字符继续累计求和,否则说明第k小的move串就在以当前字符为首的字符集中。nxt数组用于存储当前字符之后的第一个与当前字符不同的字符的位置。最后从字符串从后往前进行处理,个人认为,因为从后往前处理能够保证每次能直接在双端队列中添加元素。因为这样保证后面的字符已经被处理完,文字难以叙述,强烈建议观看官方题解讲解。

2.代码

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

int cnt[27];    // 统计字符串中每个字符的个数

void solve(){
    for(int i=0;i<26;i++){
        cnt[i]=0;
    }
    int n,k,sum=0,index=-1;
    cin>>n>>k;
    string s;
    cin>>s;
    for(auto c:s){
        cnt[c-'a']++;
    }
    for(int i=0;i<26;i++){
        if(sum+cnt[i]<k){   // 说明不在当前字符位置
            sum+=cnt[i];
        }else{
            index = i;  // 最终结果的move串的首字符即为当前字符
            break;
        }
    }
    vector<int>nxt(n);  // 存储当前字符之后的第一个与当前字符不同的字符的位置
    for(int i=n-1;i>=0;i--){
        if(i<n-1&&s[i]==s[i+1]){
            nxt[i] = nxt[i+1];
        }else{
            nxt[i] = i+1;
        }
    }
    deque<int>q;    // 存储从小到大排序的结果字符的位置
    for(int i=n-1;i>=0;i--){
        if((s[i]-'a')!=index){
            continue;
        }
        int x = nxt[i];
        if(x<n&&s[i]<s[x]){     // 当前字符小于s[nxt[i]],说明比之后的任意一个move串都大
            q.emplace_back(i);
        }else{
            q.emplace_front(i); // 当前字符大于s[nxt[i]],说明比之后的任意一个move串都小
        }
    }
    for(int i=1;i<k-sum;i++){
        q.pop_front();      // 找到第k小的move串的对应的首字符的位置
    }
    cout<<s[q.front()]<<s.substr(0,q.front())<<s.substr(q.front()+1)<<endl;
}

signed main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}

G.小苯的数位MEX

好难不会

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录) 本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。 阅读详情

相关推荐

Nginx国密HTTPS实战:SM2双证书部署与TongSuo编译指南

HTTPS作为保障网络通信安全的基石,其核心在于SSL/TLS协议与公钥基础设施(PKI)。它通过非对称加密实现身份认证与密钥交换,再结合对称加密确保数据传输的机密性与完整性。在金融、政务等对自主可控有严格要求的领域,采用符合国家密码管理局标准的国密算法(SM2/SM3/SM4)替代国际通用算法(如RSA/SHA-256/AES),已成为满足安全合规要求的关键技术路径。国密SSL不仅是一套算法替换,更涉及从底层密码库到上层应用服务的完整技术栈改造。其核心价值在于实现密码技术的自主可控,提升特定场景下的安全防

weixin_29323365的博客 497

15天大厂真题带刷day8

美团商家的订单发起时,订单编号最开始从 1 开始,后续每发起一个订单,订单编号便在上一订单编号的基础上 +1。为了防止订单号过大,商家还可以设置一个编号上限𝑚m,当订单编号超过𝑚m时,将又从 1 开始编号。小美想知道,当订单编号上限为𝑚m时,第𝑥x个订单编号是多少?将有𝑞q次询问。

qq_74794797的博客 728

【文献笔记】ICCV 2021 | Point Transformer

作者提到,特别适合点云处理,因为自注意力机制是的核心,本质上就是一个集合算子:它对输入元素具有顺序不变性和数量不变性3D点云是无序的,即使改变点云txt文件中的点顺序也不会有任何影响。自注意力机制天然具有排列不变性,因为它通过对所有"点对"的关系进行建模来处理输入,而不依赖于任何特定的输入顺序点云数据通常覆盖了3D空间中的对象或场景,理解这些数据需要捕捉点与点之间复杂的空间关系。自注意力机制能够有效的捕捉这些关系,因为它为每个"点对"赋予一个。

m0_55908255的博客 965

ZT40 小苯的数字权值

小苯现在拿到了一个正整数 x,他希望将 x 分解为若干不等于 1 的数字(也可以不做分解),使得所有分解出的正整数乘积等于 x,且所有数字的权值之和尽可能大,你能帮帮他求出最大的权值吗。接下来 T 行,每行一个正整数 x (2≤x≤2×10^5),表示每组数据中小苯询问的数字 x。输出包含 T 行,每行一个正整数表示每组测试数据的最大权值和。第二个测试数据中,将 10 分解为 2×5,权值和为 4。第一个测试数据中,无法分解,直接取 2 的权值为 2。小苯定义一个数字的权值为:该数字的因子个数。

bingw0114的博客 1838

100天精通Oracle-实战系列(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

100天精通Oracle-实战系列(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

LuciferLiu_DBA 1993

用urdf给自己的ROS小车编写模型

3.3 使用urdf编写自己的ROS小车模型 3.3.1 常见的ROS小车结构有哪些? 下面就是常见的ROS小车,相信在大家的脑海里已经有了自己小车的样子,下面我和大家一起使用urdf对ros小车建模。 这里只对urdf进行简单介绍,然后就带大家使用urdf最基础的标签,建立机器人的urdf机器人模型。关于更多细节,请参看官网:http://wiki.ros.org/urdf/Tutorials 3.3.2 什么是urdf?建模的原因? 什么是urdf? URDF(Unified Robot Descri

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

算法小集(

【代码】算法小集(

weixin_66385155的博客 301

中科大大数据学院2023年保研夏令营机试题目【无offer,直接放题了~】(2023.07.22下午14:35-17:35考试)

给定一串数字,最后一个数是0表示结尾,表示数字串的终止,为无效数字。将该数字串存储在双向链表中,判断是否为回文串,若是,则输出Yes,否则输出No.

m0_51339444的博客 1921

牛客周赛 Round 91 EF

思路:模拟,能够翻转成功就三种情况:(1)矩阵只有两行全是1 (2)矩阵只有两列全是1 (3)矩阵的1呈现”十“字状,且交点为0思路:根据唯一分解定理:可知一个数的为本题要我们求n!的因子个数,n!=(n-1)!*n,n!可以分解成形如:,括号内的代表(n-1)!的分解,外面的是n的因数分解,那么n!的因数分解就是将原来(n-1)!中已经出现过的底数进行指数相加,然后再增加新的底数,化简为:,n!

2302_79372568的博客 743

Linux系统安装部署Redis完整教程(图文详解)

最近需要在Linux服务器安装部署Redis,参考了网上很多的文章,比较零碎,所以我自己写了一篇完整的Redis安装部署文档,在部署Redis之前重装了我的华为服务器,就是为了给大家一步步阐述我的操作过程,配合图文进行讲解更加通俗易懂!

黄团团的个人博客 6692

目标检测YOLO实战应用案例100讲-基于数据融合的SAR图像中海上目标检测与跟踪(中)

本文使用的数据集为欧空局(European Space Agency, ESA)提供的Sentinal-1 数据集,Sentinel-1是欧洲“哥白尼计划”的SAR卫星机群,主要是用于陆地和海 洋服务的极地轨道全天候昼夜雷达成像任务[ 34]。Sentinel-1A于2014年4月3日发 射升空,Sentinel-1B于2016年4月25日发射升空,每颗卫星都携带C波段SAR, 共同提供地球表面的全天候、昼夜图像。

qq_36130719的博客 356

牛客周赛 Round 66(A—G)(并查集,线段树,思维,数位dp)

牛客周赛 Round 66(A—G)(并查集,线段树,思维,数位dp)

weixin_74754298的博客 1070

基于simulink的电气弹簧ES稳压控制模型仿真

若要补偿母线电压的谐波,需控制ES上的谐波,即在单闭环母线电压有效值控制的基础上,增加谐波抑制环节来进行谐波控制,现有的各种检测和抑制谐波的方法有采用模拟滤波器、傅里叶分析进行谐波分析、基于瞬时无功功率理论的方法等。当关键负载ZC为电流源型非线性负载时,电路原理图如图7所示,由于电流源型非线性负载可以等效为谐波电流源,关键负载电流ic便会含有谐波分量,导致输电线电流is和母线电压VS同样会含有谐波分量,导致供电质量的严重下降,对用电设备的正常工作造成影响。分别为流过线路阻抗、非关键负载、关键负载的电流,

FPGA/MATLAB学习教程/源码/项目合作开发 1631

牛客周赛 Round66(DEF)

【代码】牛客周赛 Round66(DEF)

2302_79372568的博客 600

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

牛客周赛 66 F 小苯的字符提前

例如:aababc,move(3)=baaabc,move(5)=baabac,可以发现b>a,如果移动3之后的b,会让3位置的b掉到4位置,move(3)和move(5)相比四位置的a<b,所以3位置之后全部的b都会在4位置上小于a,那么就可以确定move(3)的字典序小于后面全部的。给出长度为n的字符串,定义move(i)串为将第i个字母移到首位的字符串,对于move(1)到move(n)的字符串,求出字典序第k小的move串。对于这些move串的相对字典序,可以使用deque来倒序维护。

qq_74190237的博客 481

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

牛客周赛66 G 小苯的数位MEX

题目问的是在区间[x,x+k]中,最大的mex和能够有这个mex的数的数量,因为是数位上第一个没有出现的非负整数,所以mex的范围是[0,10],那么就可以枚举mex,然后用区间[0,x+k]中mex为当前枚举的mex数的数量-[0,x-1]中mex为当前枚举的mex数的数量。如何快速的统计出这个区间的数量呢?可以想到使用数位dp。定义mex为一个数的各个数位上没出现的第一个非负整数,给出x和k,可以让x加上一个小于k的非负整数,问最大的mex是多少,能有几个这样的数。

qq_74190237的博客 284

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

牛客周赛 Round 66 E题 小苯的蓄水池(hard)

我们可以把每个区间的所有点的祖先结点都赋值为该区间最右端点i,在最开始的情况下每两个相邻的蓄水池之间都有一个隔板,所以我们初始化并查集所有的顶点i的根节点为他们本身。假设我们现在要拆除i和i+1之间的挡板,在我们这个并查集中也就相当于合并i和i+1的祖先结点(即合并i和i+1各自所在的这两个集合)。所以我们如果要拆除给定区间[l,r]内的所有挡板,体现在并查集上,就等价于把[l,r]从左往右进行并查集的合并,合并的同时将操作里涉及的区间进行统计。时间复杂度:O(n)

qq_45554473的博客 339

牛客周赛 Round 66 —— D.小苯的蓄水池(easy)

【代码】牛客周赛 Round 66 —— D.小苯的蓄水池(easy)

2401_82757880的博客 315

第二十七周代码(蓝桥第10场小白周赛+牛客周赛Round 41)

手痒想写代码........2024年5月6日——5月13日。

CH3CH2CH4的博客 565

牛客周赛 Round 49(Python3)

得到的结果就是区间。

YYYYYY_lll的博客 1736

some 牛课题

【代码】some 牛课题。

2301_80160438的博客 253

牛客周赛round 72 小红的01串B题(好串)

牛客周赛round 72 B题小红的01串

2301_80130863的博客 1452

牛客周赛 Round 46:祥子拆团(组合数学,计数问题)

例如 x=6,y=2x=6,y=2x=6,y=2 时,有 6×1=6,3×2=6,2×3=6,1×6=66 \times 1=6,3 \times 2=6,2 \times 3=6,1 \times 6=66×1=6,3×2=6,2×3=6,1×6=6 这 4 种方法。接下来 TTT 行,每行输入两个正整数 x,y(1≤x,y≤109)x,y(1 \leq x,y \leq 10^9)x,y(1≤x,y≤109) ,表示询问。对于每个询问,在一行中输出一个整数表示答案。

2301_80718054的博客 484

区间和并+前缀和

主要是连通,计算的过程可以不用弄出来,每次需要再计算就行。连通也可以用一个数组来标记vis[i] = l。每次全部连通到 l 上,输出时,左右扩大就行。

2401_87338545的博客 225

【OJ比赛日历】快周末了,不来一场比赛吗? #02.05-02.11 #8场

(Leetcode、牛客…【LGR-131】常菁数 2 月普及组月赛 & yLOI2023 回归赛。2023-02-05(周日) #3场比赛。2023-02-08(周三) #1场比赛。2023-02-09(周四) #1场比赛。2023-02-10(周五) #1场比赛。2023-02-11(周六) #2场比赛。2023-02-06(周一) #无比赛。2023-02-07(周二) #无比赛。牛客(Nowcoder) ·(Kaggle、天池…#小白月赛 #牛客系列赛。#Rated #官方比赛。

CompHub的博客 421

蓝桥杯31天真题冲刺|题解报告|第二十九天

大家好,我是snippet,今天是我们刷题的第二十九天,今天主打打比赛,牛客+AcWing+力扣,今天的牛客是真的有趣,下面是我今天AcWing周赛的题解

hxw453的博客 818
上一篇: 牛客周赛65
下一篇: 牛客周赛67
AstronomyFirst
博客等级 码龄4年 195粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值