牛客周赛 Round 106

牛客周赛 Round 86A-C 来源:牛客网。 阅读详情

A. 小苯的方格覆盖

猪猪王图拨号

最近迷上了华容道游戏,这天他找到了他的部下撤云猪猪

并给了他一个 3 行 n 列的矩阵。
图拨号希望撤云猪猪用一种 1×2 的小方格(可以旋转 90 度,即覆盖两个在同一行或同一列上相邻的格子)恰好填满这个矩阵,不能有空位,小方格之间也不能重叠。
只需要帮撤云猪猪判断是否可以用 1×2 的小方格填满这个 3 行 n 列的矩阵即可。
注意:1×2 的小方格可以旋转 90 度,变成 2×1 的小方格。

解题思路:只要列是偶数的都能用小方格进行填满

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
    int n;
    cin>>n;
    if(n%2==0) cout<<"YES"<<'\n';
    else cout<<"NO"<<'\n';
}
int main() {
    int t=1;
    // cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

B. 小苯的数字折叠

小苯发现了一种特殊的数字运算,称为“数字折叠”。对于一个正整数 x,定义其折叠操作为:
,∙将 x 的各位数字倒序排列并除去前导 0 得到 x′;
,∙计算 x+x′ 得到新数字;,∙重复这个过程直到得到一个回文数。
例如,对于 x=68,有:
,∙第一次折叠:68+86=154;
,∙第二次折叠:154+451=605;

第三次折叠:605+506=1111。
现在给定一个正整数 n 和最大操作次数 k,请判断:n 在最多 k 次折叠操作内(当然,也可以不操作)是否能变成回文数。如果能,输出最少操作次数得到的回文数和最少的操作次数;如果不能,输出第 kkk 次操作后的结果和 −1。

解题思路:模拟

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
bool fun(ll n){
    ll sum=n,tmp=0;
    while(n>0){
        tmp=tmp*10+n%10;
        n/=10;
    }
    if(tmp==sum) return true;
    else return false; 
}
ll fun_(ll n){
    ll tmp=0;
    while(n>0){
        tmp=tmp*10+n%10;
        n/=10;
    }
    return tmp;
}
void solve() {
    ll n,k;
    cin>>n>>k;
    int f=0;
    for(int i=0;i<k;i++){
        if(fun(n)){
            break;
        }else{
            f++;
            n+=fun_(n);
        }
    }
    if(fun(n)) cout<<n<<" "<<f<<'\n';
    else cout<<n<<" "<<-1<<'\n';
}
int main() {
//     int t=1;
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

C. 小苯的波浪加密器

小苯升级了她的数字波浪生成器,现在它变成了一个加密器。给定一个长度为 n−2 的数字序列 a3,a4,…,an 和两个区间 [L1,R1][L2​,R2​]。
数字波浪序列的生成过程如下:
,∙小苯从 [L1,R1] 区间中选择一个数字作为波浪序列的第一个数字 a1。
小苯从 [L2​,R2​] 区间中选择一个数字作为波浪序列的第二个数字 a2​。
,∙从第三个数字开始,每个数字都等于前面两个数字的乘积的个位数。
现在小苯给定了你 a3​ 到 an​ 的所有数字,请你还原出波浪序列对应的第一个和第二个数字 a1​ 和 a2。如果存在多个解,请输出使得整个波浪序列字典序最小的答案(即优先最小化 a1​,其次最小化 a2)。
注意,输入只保证 a5​ 到 an 满足上述关系;a3​、a4 给出但不一定与未知的 a1​、a2​ 一一对应,需求解时自行验证是否存在 a1​、a2​ 使得整个序列一致。如果无解,则输出两个固定的整数 −1。

解题思路:有用的只有个位数, a3,a4..an为前两个数乘积后模10, 所以取前10个数和后10个数的效果是一样, 但是题中要求最小化选出的a1和a2, 因此选择前10个数即可 

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
    ll n,L1,R1,L2,R2;
    cin>>n>>L1>>R1>>L2>>R2;
    vector<ll> a(n+1);
    for(ll i=3;i<=n;i++) cin>>a[i];
    R1=min(R1,L1+19);
    R2=min(R2,L2+10);
    bool f=false;
    for(a[1]=L1;a[1]<=R1;a[1]++){
        for(a[2]=L2;a[2]<=R2;a[2]++){
            if(a[3]==(a[1]*a[2])%10){
                if(n<4||(n>=4&&(a[2]*a[3])%10==a[4])){
                    f=true; break;
                }
            }
        }
        if(f) break;
    }
    for(ll i=3;i<=n;i++){
        if((a[i-2]*a[i-1])%10!=a[i]) { f=false; break; }
    }
    if(!f) cout<<"-1"<<" "<<"-1"<<'\n';
    else cout<<a[1]<<" "<<a[2]<<'\n';
}
int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

D, 小苯的数字变换

小苯最近在研究一种新型的数字变换游戏,名为“数字螺旋”。给定一个长度为 n 的数字序列 a1,a2,…,an,数字螺旋的生成规则如下:
,∙任意选择一个数字 ai​,将其替换为 ai⊕⌊ai2⌋,∙目标是通过最少的操作次数,使得整个序列变成一个回文序列。
现在,小苯需要你帮助他计算出最少需要的操作次数。如果无法达成目标,则输出 −1。
【名词解释】
按位异或(⊕):对两个整数的二进制表示按位按位异或运算。
⌊x⌋:代表对 x 进行下取整操作,得到不超过 x 的最大整数。
回文序列:一个序列被称作回文序列,当且仅当这个序列从左往右读和从右往左读是相同的。换句话说,对于任意的 1≦i≦n,均有 ai=an−i+1 成立。

解题思路:对于你选择的数字ai, 经过与ai/2 , 按位异或后, 多次执行这个操作后, 会重新变回ai,所以原数字中的前后数对, 如果想成功匹配, 必须是在对方的循环里面的, 然后取最小值 

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
    int n; cin>>n;
    vector<int> a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    int ans=0;
    for(int i=1;i<=n/2;i++){
        int sum_1=0;
        int x=a[i],y=a[n+1-i];
        while(x!=y&&sum_1<32){
            x=x^x/2;
            sum_1++;
        }
        int sum_2=0;
        x=a[i],y=a[n+1-i];
        while(x!=y&&sum_2<32){
            y=y^y/2;
            sum_2++;
        }
        if(x==y) ans+=min(sum_1,sum_2);
        else { cout<<-1<<'\n'; return; }
    }
    cout<<ans<<'\n';
}
int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

E. 小苯的洞数组构造

一个正整数的“洞数”定义为:其所有数位的洞数之和。例如:299 的洞数是 0+1+1=2。
现在小苯给定了两个正整数 n,sum 希望你帮他构造一个数组 a,满足:
, a 的长度恰好是 n;
, a 中所有数字的值均介于 [1,10^10] 之间,即:1≦ai≦10^10;
, a 中所有数字的和不超过 sum,即:∑iai≦sum,注意是不超过,不是恰好;
,∙a 中所有数字的“洞数”之和尽可能地多。
请你帮他构造一个符合要求的数组 a 吧。

解题思路:通过手动模拟就会发现, 我们在从个位洞数增加的到十位洞数再到百位洞数的过程中只有1 4 8是最优的,类似于1, 4, 8, 48, 88, 488. 888....

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll arr[] = { 1, 4, 8, 48, 88, 488, 888, 4888, 8888, 48888, 88888, 488888, 888888, 4888888, 8888888, 48888888, 88888888, 488888888, 888888888, 4888888888, 8888888888};
void solve(){
    ll n,mx;
    cin>>n>>mx;
    vector<ll> a(n,1);
    if(n>mx){
        cout<<-1<<endl;
        return;
    }
    ll sum = n;
    for(int i=1;i<=20;i++){
        for(int j=0;j<=n-1;j++){
            ll cost = arr[i]-a[j];
            if(sum+cost>mx)break;
            a[j] = arr[i];
            sum+=cost;
        }
    }
    for(int i=0;i<=n-1;i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;
}
int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

F. 小苯的数组计数

小苯认为一个长度为 m 的数组 b1,b2,…,bm​ 是美丽的,当且仅当其满足以下所有条件:
m≥3;, b1≠bm​;, 对于任意 1<i<m,均有:b1>bi 且 bi<bm​(即所有中间元素的数值都必须同时小于首位元素和末位元素)。
现在小苯给定了一个长度为 n 的序列 a1,a2,…,an​,他想知道 a 中有多少个子数组是美丽的,请你帮他数一数吧。
【名词解释】
子数组:从原数组中,连续的选择一段元素(可以全选、可以不选)得到的新数组。

解题思路:枚举右端点看有多少个合法的左端点, 这个合法的左端点是当前枚举的右端点左侧第一个大于当前数的数,左右端点中间的数都是小于右端点的,实现上是用单调栈

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll arr[] = { 1, 4, 8, 48, 88, 488, 888, 4888, 8888, 48888, 88888, 488888, 888888, 4888888, 8888888, 48888888, 88888888, 488888888, 888888888, 4888888888, 8888888888};
void solve(){
    int n;
    cin>>n;
    vector<ll> a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    int ans=0;
    vector<ll> stk;
    for(int i=1;i<=n;i++){
        bool f=0;
        while(stk.size()&&a[stk.back()]<=a[i]){
            f|=(a[stk.back()]==a[i]);
            stk.pop_back();
        }
        if(stk.size()&&stk.back()<i-1&&!f){
            ans++;
        }
        stk.emplace_back(i);
    }
    stk.clear();
    for(int i=n;i>0;i--){
        bool f=0;
        while(stk.size()&&a[stk.back()]<=a[i]){
            f|=(a[stk.back()]==a[i]);
            stk.pop_back();
        }
        if(stk.size()&&stk.back()>i+1&&!f){
            ans++;
        }
        stk.emplace_back(i);
    }
    cout<<ans<<'\n';
}
int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

 

感谢大家的点赞和关注,你们的支持是我创作的动力!

 

牛客周赛 Round 38 G.小红的区间删除【树状数组】 时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 262144K,其他语言524288K。 阅读详情

相关推荐

5个4000比特大状态置换算法的设计与分析

下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。

HuangJinLong2的博客 340

牛客周赛 Round 106(思维、RMQ、二分)

本文介绍了牛客周赛 Round 106 的五个编程题解,每题均包含解题思路和代码实现(Python/C++)。主要内容包括: A题通过奇偶性判断矩阵覆盖可行性 B题模拟数字折叠回文过程 C题利用个位乘积特性求解波浪加密 D题通过循环节特性优化数字变换计算 E题分析数字构造的价值与代价平衡策略 各题解均注重思维优化,涉及数学特性、位运算、循环节等算法技巧,并提供双语言代码实现。其中D、E题解法尤为巧妙,D题利用位运算的循环节特性降低复杂度,E题通过低位优先策略最大化价值收益。

mldl_的博客 1020

什么是Merkle树?用“文件柜”类比理解区块链的核心技术

Merkle树是一种用于区块链的数据结构,像一个高效的“文件柜”,用于存储和验证大量交易数据。比特币通过Merkle树将交易哈希组织成树状结构,层层汇总,最终生成一个唯一的根哈希,存储在区块头中。这种设计大幅减少数据存储和验证成本,支持快速校验交易的完整性和存在性。Merkle树通过密码学保证数据不可篡改,广泛应用于比特币、区块链及其他分布式系统。它的优势在于高效、轻量和安全,尤其适合轻节点验证和数据同步。理解Merkle树就像掌握区块链的“索引秘籍”,是Web3世界的关键技术。

在路上的专栏 1192

小苯的方格覆盖(牛客周赛 Round 106)

【代码】小苯的方格覆盖(牛客周赛 Round 106)

GordrnGhost的博客 190

LTM4644 四通道并联 16A 输出配置:PCB 布局 3 要点与热仿真验证

本文详细解析了LTM4644四通道并联实现16A输出的PCB布局与热管理要点,包括电流路径对称性设计、热优化布局技巧和接地系统优化。通过实际工程案例,展示了如何确保电流均流、热分布均衡及长期可靠性,为FPGA、ASIC和服务器主板供电设计提供高效解决方案。

weixin_33314040的博客 395

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 515

小苯的数组计数(牛客周赛 Round 106)

【代码】小苯的数组计数(牛客周赛 Round 106)

GordrnGhost的博客 326

如何有效使用Project(1)——编制进度计划、保存基准

1.前言: 软件产品的研发、升级、定制等,一般都是以项目的形式进行,此时项目进度计划以及资源使用情况就变成了项目经理关注的重点。如何让项目计划有效可控,及时暴露问题?如何查看资源的负荷情况,看资源分配是否合理。 当然,如果你的公司已经实施了专门的PM软件来监督管控,可以忽略本文。否则,你可以用微软的Project来做到这一工作。 我也算是一个专业的从事PM软件产品的人(虽然我们的客户都是制造...

weixin_34236869的博客 2115

小苯的洞数组构造(牛客周赛 Round 106)

【代码】小苯的洞数组构造(牛客周赛 Round 106)

GordrnGhost的博客 267

C语言 在合并编译 ( 多.c文件 ) 情况下 实现 linked list ( 链表 ) 教程 . 更新ing

写在前面  依旧是参考借鉴了 浙江大学 温老师 的视频教程,很不错,在中国大学MOOC上,强力推荐!  虽说有借鉴,但是能保证的是每一行代码都是我自己经过理解后手敲出来的,所以才来做了这部分的教程。  最后,带 * 字符是我个人觉得可以添加的功能,按理来讲是可以不看的,而且大概率是可以有更好的改进的。  PS: 文章还在更新,如果文字蓝了(有超链接),说明写完了,如果没蓝,说明我在开军舰.jpg 源代码:  这里→源代码. 第一步:前置工作  先说一下每一篇都会出现 main 函数的,stage1 只是给没

weixin_47287635的博客 524

从mseed到SAC格式转换全攻略:mseed2sac工具安装与批量处理技巧

本文详细介绍了如何将mseed格式的地震数据高效转换为SAC格式,涵盖mseed2sac工具的安装、单文件转换技巧、批量处理自动化实现以及元数据高级处理策略。通过具体命令和脚本示例,帮助地震学研究者快速掌握数据预处理的关键技术,提升波形数据分析效率。

ruby5的博客 927

小苯的波浪加密器(牛客周赛 Round 106)

【代码】小苯的波浪加密器(牛客周赛 Round 106)

GordrnGhost的博客 266

利用Matlab绘制非线性系统相图:从理论到实践

本文详细介绍了如何利用Matlab进行非线性系统的相图绘制与相平面分析。从理论基础的状态空间转换出发,通过无阻尼线性谐振子和范德波尔振荡器等实例,手把手演示了使用ode45求解器绘制相图、分析平衡点与极限环的完整流程,并分享了方向场绘制、参数分岔探索及常见错误解决方案等高级技巧,为动力学系统分析与控制设计提供了直观强大的可视化工具。

yhn456789的博客 905

小苯的数字折叠(牛客周赛 Round 106)

【代码】小苯的数字折叠(牛客周赛 Round 106)

GordrnGhost的博客 217

大数据ZooKeeper(一):ZooKeeper基本知识

Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题。ZooKeeper本质上是一个。

Lansonli(蓝深李)的博客 3148

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

小苯的数字变换(牛客周赛 Round 106)

【代码】小苯的数字变换(牛客周赛 Round 106)

GordrnGhost的博客 244

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

单调栈:Round106F题题解

也就是ar<al,对于这种情况,也就是r到l之间都得小于al,al是一个答案,那么对于这个ar会不会有第二个al?为什么,从l往右r到l之间没有答案了,往左呢,如果要合适,那么al左边的要大于al,因为此时al在中间嘛,但是这样子al和当前al左边的也会大于ar,不成立了。在这种情况下,一个ar只有一个合法的al,并且中间只能小于不能等于;由于al和ar守住了,中间的值大小不会影响后续,我们可以出栈,直到ar<al,一个单调递减的栈建立了,并且al和ar要有一定距离,我们栈不直接存入值,而是存入位置。

2301_79795628的博客 247

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

牛客周赛 Round 106(小苯的方格覆盖/小苯的数字折叠/ 小苯的波浪加密器/小苯的数字变换/小苯的洞数组构造/ 小苯的数组计数)

通过计算平均每个数字的最大值x,可以确定使用多少位的全8数字。否则,调整数字范围,确保总和不超过sum。数字8的洞数为2,是单个数字中洞数最大的。当sum<n时,无法满足每个数字至少为1的条件,直接输出-1。其他情况下,通过动态调整每个数字的大小,确保总和不超过sum的同时最大化洞数之和。二:将a[i] 遍历循环一次,看有没有a[n +1- i],然后min(k,u-k);一:将 a[i],和a[n +1- i]同时变换并记录,讨论每种情况;故若n为奇数,总格子数3n为奇数,无法被2整除,直接排除。

2401_88124440的博客 567

2025.2.2牛客周赛 Round 79 IOI

这次简单+题量少,全补完了,似乎从来没有过。其实就补了最后一题,也很简单,E虽然没过,但是思路是对的。

2301_81692739的博客 933

牛客周赛 Round 51

牛客周赛 Round 51

学校题目记录日常 2417

牛客周赛Round 85 D-F

定义一个字符串是“双生串”,当且仅当字符串中每一种字符出现的次数都是偶数次。现在,小紫拿到了一个长度为n,仅由字符‘0’和‘1’组成的字符串s∙小红先手操作,删除该串的一个非空前缀;∙小紫紧接着操作,删除该串的一个后缀(可以是空串)。如果最终可以生成一个非空双生串,那么小紫将获得最终的胜利。小紫发现这个游戏自己非常劣势,因为小红可以删除到只剩下一个字符导致自己必输,于是她强制让小红随机删除一个前缀(即删除1∼n个字符)。请你计算小紫最终获胜的概率。第一行输入一个正整数n1≦n≦。

2203_75752922的博客 1008

牛客——“葡萄城杯”牛客周赛 Round 53

“葡萄城杯”牛客周赛 Round 53 D. 小红姐比赛 E. 折半丢弃 F. 小红走矩阵 G. 游游的删点直径(树形dp)

鱼香rose_的博客 554

牛客周赛 Round 3

菜鸟的第一次AK,真不错

m0_62784756的博客 882

牛客周赛round115 c小苯的真假游戏[To do list]

来源:牛客网。

蒟蒻 387

牛客周赛 Round 3 解题报告 | 珂学家 | 贪心思维场

只需记得,她永远是那位“兼具智慧与美貌的八重神子大人”就好。

m0_66102593的博客 1084

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 14
上一篇: 力扣 第 463 场周赛
下一篇: AtCoder Beginner Contest 420
一只鱼^_
博客等级 码龄3年 1073粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值