牛客小白月赛98

news2024/9/22 9:53:12

牛客小白月赛98

A 骰子魔术

链接:https://ac.nowcoder.com/acm/contest/85598/A
来源:牛客网

题目描述

jackle 正在给他的朋友表演一个关于骰子的魔术:
jackle 会拿出一枚骰子,骰子的表面分别写上了从 1∽500 的数字,朋友会随便说一个 1∽500 之间的点数,jackle 都能保证百分之百的掷出这个点数。
当然 jackle 有备而来,他准备了 𝑛 枚特殊的骰子,第 𝑖 枚特殊骰子,可以保证每次掷出的点数都为 𝑎𝑖 。
jackle 想问你,他能不能只拿出一枚事先准备好的特殊骰子,成功完成这次魔术。

输入描述:

第一行输入 2 个正整数 𝑛 (1≤𝑛≤1000),𝑥 (1≤𝑥≤500),分别表示 jackle 准备的特殊骰子数量,朋友说的那个点数。
第二行输入 𝑛 个正整数 𝑎𝑖 (1≤𝑎𝑖≤500),分别表示每枚特殊骰子可以掷出的点数。

输出描述:

如果 jackle 可以成功完成这次魔术,请你输出 YES;否则请你输出 NO。

示例1

输入
5 3
1 2 1 3 12
输出
YES

说明

jackle 可以选择第 4 个骰子,因为 𝑎4=𝑥=3,所以他能百分之百掷出这个朋友说出的点数,所以可以完成这次魔术。

题解

判断ai里面有没有和X相同的

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

int n,x,a[1005];
int main(){
    int i,j,k;
    cin>>n>>x;
    for(i=1;i<=n;i++)
        cin>>a[i];
    for(i=1;i<=n;i++){
        if(x==a[i]){
            printf("YES\n");
            return 0;
        }
    }
    printf("NO\n");
    return 0;
}
B 最少剩几个?

链接:https://ac.nowcoder.com/acm/contest/85598/B
来源:牛客网

题目描述

给定一个长度为 𝑛 的序列 𝑎,如果当前序列长度至少为 2,那么你每次可以做如下两种操作之一:
选择 𝑖,𝑗 (𝑖≠𝑗),如果满足 𝑎𝑖+𝑎𝑗 是奇数,那么你可以同时删除
𝑎𝑖,𝑎𝑗 。
选择 𝑖,𝑗 (𝑖≠𝑗),如果满足 𝑎𝑖×𝑎𝑗 是奇数,那么你可以同时删除
𝑎𝑖,𝑎𝑗 。
你可以执行上面的操作无数次,只要你满足操作条件,jackle 想问你序列最少剩几个数?

输入描述:

第一行输入 1 个正整数 𝑛 (1≤𝑛≤105),表示序列的长度。
第二行输入 𝑛 个正整数 𝑎𝑖 (1≤𝑎𝑖≤109)。

输出描述:

输出序列最少剩几个数?

示例1

输入
1
114514
输出
1

说明

只有一个数,啥也操作不了。

示例2

输入
2
9 9
输出
0

题解

和Round 52 C很像,都是消除数字的问题,这道题应该来说更简单一些。
找规律:相乘是奇数那么必须至少有一个是奇数,相加是奇数必须是一奇一偶
然后两两消除,只需要记录奇数偶数的个数就行
偶数和偶数消不了

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

int n,a[100005],s1,s2,ans;
int main()
{
    int i,j,k;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>a[i];
        if(a[i]%2==0)s1++;
        else s2++;
    }
    if(s2>=s1) ans=(s2-s1)%2;
    else ans=s1-s2;
    cout<<ans<<endl;
    return 0;
}
C 两个函数

链接:https://ac.nowcoder.com/acm/contest/85598/C
来源:牛客网

题目描述

jackle 给定两个函数:

f ( x ) = a x f(x)=a x f(x)=ax
g ( x ) = { f ( x ) x = 1 ∑ i = 1 x − 1 f ( f ( i ) ) x > 1 g(x)=\left\{\begin{array}{ll}f(x) & x=1 \\ \sum_{i=1}^{x-1} f(f(i)) & x>1\end{array}\right. g(x)={f(x)i=1x1f(f(i))x=1x>1
他有 𝑄 次询问,每次给定 𝑎,𝑥,请你计算 𝑔(𝑥) mod 998244353 的结果。

输入描述:

第一行输入 1 个正整数 𝑄 (1≤𝑄≤105),表示询问次数。
接下来 𝑄 行,每行输入 2 个正整数 𝑎,𝑥 (1≤𝑎,𝑥≤109)。
输出描述:
对于每组询问,输出 𝑔(𝑥)mod  998244353 的结果。

示例1

输入
3
1 1
2 2
9982 44353
输出
1
4
572321601

题解

额,感觉智商受到侮辱。就是这个markdown 写公式,有点造孽
拿出paper推下公式就行,代码里看结果吧,太难打

#include <iostream>
using namespace std;
using LL =long long;
int main() {
    int Q, a, x;
    long long sum;
    const int mod = 998244353;
    cin >> Q;
    for (int i = 0; i < Q; i++) {
        cin >> a >> x;
        if (x == 1) {
            cout << a%mod << endl;
         
        }else{
        // 使用数学公式计算sum
        sum = 1ll*(x - 1) * x / 2;
        sum = sum%mod * a%mod * a%mod;
        cout <<sum << endl;}
    }
    return 0;
}

D 切割 01 串 2.0

链接:https://ac.nowcoder.com/acm/contest/85598/D
来源:牛客网

题目描述

jackle 在校赛的时候出过一道 “切割 01 串” 的题目,如今他又出了一道切割 01 串的题目:
给定一个长度为 𝑛 的 01 串,定义如下操作为一次 “切割”:
将长度大于 1 的字符串分割为两个非空的连续字串,记分割出来的左侧字串 𝑎 中 0 的出现次数为 𝐶0 ,右侧字串 𝑏 中 1 出现的次数为 𝐶1 ,需要满足 𝐿≤∣𝐶0−𝐶1∣≤𝑅。
你每次切割完,都会得到两个新 01 串,你可以继续选择这些已经被你切出来的 01 串做切割,只要满足切割条件。
jackle 想问你最多可以切割多少次?

输入描述:

第一行输入 3 个整数,𝑛 (1≤𝑛≤500),𝐿,𝑅 (0≤𝐿≤𝑅≤500),分别表示字符串长度,和题目中的两个参数。
第二行输入 1 个长度为 𝑛 的 01 串。

输出描述:

输出最多能切割多少次?

示例1

输入
6 2 3
011011
输出
3

说明

其中一种切割次数最多的切法如下:
第一次切割可以切:0 ∣ 11011,然后选择 11011 这个串继续做切割。
第二次切割可以切:1 ∣ 1011,然后选择 1011 这个串继续做切割。
第三次切割可以切:1 ∣ 011。

题解

区间DP
dp[l,r] 区间[l,r]的对应的答案
然后判断在区间[l,r]中是否符合条件要求累加

#include<bits/stdc++.h>
using namespace std;
int n,l,r;
char s[505];
int cnt[505][2],dp[505][505];

int main(){
    int i,j,k;
    cin>>n>>l>>r>>s+1;
    for(i=1;s[i];i++){
        for(j=0;j<2;j++)cnt[i][j]=cnt[i-1][j];
        cnt[i][s[i]-'0']++;
    }
    for(int len=1;len<=n;len++){
        for(i=1;i+len-1<=n;i++){
            for(j=i;j<i+len-1;j++){
                int c=abs((cnt[j][0]-cnt[i-1][0])-(cnt[i+len-1][1]-cnt[j][1]));
                if(c<=r&&c>=l) dp[i][i+len-1]=max(1+dp[i][j]+dp[j+1][i+len-1],dp[i][i+len-1]);
            }
        }
    }
    printf("%d",dp[1][n]);
    return 0;
}
E and xor or

链接:https://ac.nowcoder.com/acm/contest/85598/E
来源:牛客网

题目描述

给定一个长度为 𝑛 的序列 𝑎,jackle 想让你求出有多少个区间 [𝑙,𝑟] 满足如下条件:
1≤𝑙≤𝑟≤𝑛
2𝑘1≤(𝑎𝑙 & 𝑎𝑙+1 &…& 𝑎𝑟)⊕(𝑎𝑙 ∣ 𝑎𝑙+1 ∣…∣ 𝑎𝑟)<2𝑘2
其中 &,∣,⊕,分别表示按位与,按位或,按位异或。

输入描述:

第一行输入 3 个整数 𝑛 (1≤𝑛≤5×105),𝑘1,𝑘2 (0≤𝑘1<𝑘2≤109)。
第二行输入 𝑛 个整数 𝑎𝑖 (0≤𝑎𝑖≤1018)。

输出描述:

输出满足条件的区间数量。

示例1

输入
4 0 2
2 1 4 3
输出
1

说明

只有区间 [1,2] 满足条件:20≤(2 & 1)⊕(2 ∣ 1)=3<22

示例2

输入
6 0 4
7 6 7 6 7 7
输出
14
在这里插入图片描述

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

int n,k1,k2,a[500005],l[65][500005];

signed main()
{
    cin>>n>>k1>>k2;
    for(int i=1;i<=n;i++)cin>>a[i];
    
    if(k1>=60)
    {
        cout<<0;
        return 0;
    }
    
    int len=60;//1e18的二进制数长为60
    for(int k=0;k<len;k++)//枚举位数,然后用双指针算法处理出数组l[][]
    {
        int cnt0=0,cnt1=0;//0的个数,1的个数
        for(int i=1,j=1;j<=n;j++)
        {
            int t=((a[j]>>k)&1);
            t?cnt1++:cnt0++;
            while(cnt0 && cnt1)//同时存在0和1
            {
                l[k][i]=j;
                int t=((a[i++]>>k)&1);
                t?cnt1--:cnt0--;
            }
        }
    }
    
    //符合条件的区间:f[l,r]的二进制数最高1的位数在[k1,k2-1]
    int ans=0;
    for(int i=1;i<=n;i++)//枚举左边界
    {
        int a=n+1,b=n+1;
        for(int k=k1;k<len;k++)
        {
            if(l[k][i]==0)continue;
            if(k<=k2-1)a=min(a,l[k][i]);
            else b=min(b,l[k][i]);
        }
        if(a==n+1)continue;
        ans+=max(b-a,0LL);
    }
    cout<<ans;
    
    return 0;
}
F 绝妙的手法

链接:https://ac.nowcoder.com/acm/contest/85598/F
来源:牛客网

题目描述
本题出题时想到的贪心做法是错误的,评测数据也是按照出题时的std造的,目前本题没有正确解法,不建议大家做这道题。

给定一个长度为 𝑛 的序列 𝐴,你每次可以做如下操作:
每次选择两个不同的下标 𝑖,𝑗,令 𝐴𝑖=𝐴𝑖+𝐴𝑗
jackle 想问你最少操作几次,可以使得序列中恰好有 𝑚 个正数。

输入描述:

注意本题有多组测试数据。
第一行先输入 1 个整数 𝑇(1≤𝑇≤2×105),表示数据组数。
对于每组测试数据:
第一行输入 2 个整数 𝑛,𝑚 (1≤𝑛≤2×105,0≤𝑚≤2×105)
第二行输入 𝑛 个整数 𝐴𝑖 (−1012≤𝐴𝑖≤1012)。
题目保证 ∑𝑛≤2×105

输出描述:

对于每组测试数据:
如果能通过操作,使得序列中恰好有 𝑚 个正数,请你输出最小操作次数;否则请你输出
−1。

示例1

输入
1
4 3
-1 -1 1 2
输出
1

说明

显然操作一次即可:选择 𝑖=1,𝑗=4,令 𝐴1=𝐴1+𝐴4=−1+2=1,操作完之后 𝐴1=1,那么此时序列中恰好 3 个正数。

示例2

输入
1
5 3
0 0 0 0 0
输出
-1

说明

由于所有数都是 0,所以无论怎么执行 𝐴𝑖=𝐴𝑖+𝐴𝑗 ,序列中的数都还是 0,所以一定无法操作使得序列恰好出现 3 个正数。

示例3

输入
2
4 2
-10 1 1 1
6 4
4 -2 -2 -3 2 -4
输出
1
2

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

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

相关文章

Hadoop环境安装及HDFS初步使用

一、Hadoop原理 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distr…

【深度学习】【语音TTS】GPT-SoVITS v2 实战,训练一个人的音色,Docker镜像

文章目录 原理Dockerdocker push训练教程: https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/xyyqrfwiu3e2bgyk 原理 Docker 不用docker不行,不好分配显卡, 做个docker镜像: docker pull pytorch/pytorch:2.1.2

【数据结构与算法 | 图篇】Dijkstra算法(单源最短路径算法)

1. 前言 由图&#xff1a; 如果我们想要求得节点1到节点5&#xff08;也可以是其他节点&#xff09;的最短路径&#xff0c;我们可以使用Dijkstra算法。 2. 步骤与思路 1. 将所有顶点标记为未访问(顶点类的visited属性设置为false)。创建一个未访问顶点的集合。 2. 为每个顶…

Web开发:使用Abp.AutoMapper进行实体映射的demo

控制台程序为例&#xff0c;展示该demo 一、安装Nuget包 二、文件结构 三、AutoMapperProfile.cs&#xff08;映射规则&#xff09; using AutoMapper;namespace ConsoleApp1 {public class AutoMapperProfile : Profile{public AutoMapperProfile(){CreateMap<Student, T…

面向新人的 Java 面试问题(1-50)

1. Java 是否独立于平台&#xff1f;如果是&#xff0c;那么如何独立&#xff1f; 是的&#xff0c;Java 是一种独立于平台的语言。与许多编程语言不同&#xff0c;javac 将程序编译为字节码或 .class 文件。此文件独立于正在运行的软件或硬件&#xff0c;但需要在操作系统中预…

--- java 包装类 泛型 ---

包装类 因为在java中基本类型&#xff08;int char...&#xff09;不是继承值Object类&#xff0c;为了满足泛型的需要&#xff0c;于是给每种基本类型都设计了对应的包装类 基本类型包装类intInteger char CharacterbyteByteShortShortfloatFloatdoubleDoublelongLongboolea…

mars3D引用模型库以及图标配置

文章目录 一、icon总结 一、icon 引入基本场景后 还差几个样式引入 mars3D图标用的 https://fontawesome.dashgame.com/ 引入对应的 <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"&…

WebGIS开发中一些常见的概念

0. 坐标系投影 地理坐标系和投影坐标系是两种常用的坐标系统&#xff0c;它们各自有着独特的特性和应用场景。 0.1 地理坐标系 地理坐标系(Geographic Coordinate System&#xff0c; 简称 GCS)是以地球椭球体面为参考面&#xff0c;以法线为依据&#xff0c;用经纬度表示地…

双指针| Java | (hot100) 力扣283, 11, 15, 42做题总结

leetcode 11 盛最多水的容器 双层for循环暴力 超出时间限制 class Solution {public int maxArea(int[] height) {int h0;int v0;for(int i0; i<height.length; i) {for(int ji1; j<height.length; j) {h Math.min(height[i],height[j]);v Math.max(v, h*(j-i));}}…

【原创公式】【完全二叉树】叶结点的计算【数据结构】

完全二叉树叶结点的计算 【铺垫】1叶结点即度为0的结点 2完全二叉树中度为1的结点只可能有0或1个 3完全二叉树的设叶结点仅可能出现在最后2层 设有完全二叉树T 【区分】第k层有a个叶结点≠第k层有a个结点 &#xff08;1&#xff09;第k层有a个叶结点&#xff1a;T的形态不唯一&…

Mac电脑虚拟机安装win11教程

Mac分享吧 文章目录 效果一、准备工作二、安装步骤方法1&#xff1a;使用虚拟机自带的win11系统&#xff0c;选中系统软件--继续--安装&#xff0c;即可完成win11安装方法2&#xff1a;通过下载好的镜像安装Windows11系统。选择镜像文件位置&#xff0c;安装&#xff0c;配置1…

MySQL进阶-MySQL管理

系统数据库 常用工具 mysql mysqladmin mysqlbinlog mysqlshow mysqldump mysqlimport/source

数据预处理和探索性数据分析(上)

目录 数据预处理 数据清洗 处理缺失值&#xff1a; 异常值检测与处理&#xff1a; 类别特征编码&#xff1a; 特征工程 创建新特征&#xff1a; 特征缩放&#xff1a; 探索性数据分析 (EDA) 使用Matplotlib进行可视化 绘制直方图&#xff1a; 绘制箱线图&#xff1…

this内存原理,成员变量和局部变量的区别

this的作用&#xff1a;区分局部变量和成员变量 this的本质&#xff1a;所在方法调用者的地址值 内存分布&#xff0c;this会保存地址 this.name name 等号的右边触发就近原则接收形参 把接收到的形参赋值给成员变量的name 成员变量&#xff0c;类方法外的变量&#xff0c…

一刷代码随想录(DP10)

115.不同的子序列 题意&#xff1a;给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指&#xff0c;通过删除一些&#xff08;也可以不删除&#xff09;字符且不干扰剩余字符相对位置所组成的新字符串。&#xff08;…

这本跨界生意经,南方黑芝麻还是暂时放下了

南方黑芝麻的跨界故事还是难讲通。 近期&#xff0c;南方黑芝麻对外称&#xff0c;公司决定暂缓新能源储能项目建设。据悉&#xff0c;2023年&#xff0c;黑芝麻拟让下属全资子公司——江西小黑小蜜食品有限责任公司转型经营储能锂电池&#xff0c;并加码建设储能锂电池生产基…

计算机毕业设计 美发管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

乘法逆元加练

前言&#xff1a;求乘法的逆元就是 n ^ (p-2), 我们平时乘以这个也是为了 #include<bits/stdc.h> using namespace std;#define int long long int n,p;int qw(int x,int num){int ans 1;while(num){if(num&1) ans ans * x % p;x x*x % p;num>>1;}return an…

SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结

目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖&#xff1f; 9、…

深度相机与红外光相机+摄像头RTSP协议

0、绪论 一般而言&#xff0c;从深度信息的角度考虑相机&#xff0c;相机可以分为&#xff1a;单目&#xff0c;双目&#xff0c;RGB-D相机&#xff1b;单目或者双目相机都是通过被动的接收信息之后通过算法解算得到图片中的深度信息&#xff0c;​ RGB-D相机是主动式的&#…