牛客小白月赛98 (个人题解)(待补完)

news2024/11/16 13:03:38

前言:

  昨天晚上自己一个人打的小白月赛(因为准备数学期末已经写烦了),题目难度感觉越来越简单了(不在像以前一样根本写不了一点,现在看题解已经能看懂一点了),能感受到自己在不断进步,希望在暑假能更努力一点吧,,少打点游戏,多学学算法,还有web的学习也要抓起来了,这几天不是在看高数就是在打游戏,感觉好堕落。

正文:

 链接:(1条未读私信) 牛客小白月赛98_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

A 骰子魔术:

#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main(){
	int n,x;
	cin>>n>>x;
	for(int i=1;i<=n;i++){
		int d;
		cin>>d;
		a[d]++;
	}
	if(a[x])cout<<"YES";
	else cout<<"NO";
	return 0;
}

桶排秒了。

B 最少剩几个?:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,res=0,ans=0;
	cin>>n;int o=n;
	while(o--){
		int x;
		cin>>x;
		if(x%2==1)res++;
	}
	int z=n-res;
	if(z>=res){
		ans=n-2*res;
	}
	else{
		ans=n-2*z-((res-z)/2)*2;
	}
	cout<<ans<<endl;
	return 0;
}

因为奇数加偶数一定是奇数,奇数乘奇数一定为奇数,分两种情况讨论,当偶数数量大于奇数的时候直接用总数减奇数数量的两倍;当奇数大于偶数的时候先减去偶数的两倍在考虑剩下的奇数即可。

C 两个函数:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll quickmod(ll a, ll b, ll c)
{
  ll ans = 1;
  a = a % c;
  while(b)
  {
    if(b&1) ans = (ans * a) % c;
    b = b >> 1;
    a = (a * a) % c;
  }
  return ans;
}
int main(){
	int n;
	cin>>n;
	while(n--){
		ll a,x,ans;
		cin>>a>>x;
		if(x==1)ans=a*x%mod;
		else{
			ans=(((a*a)%mod)*((x)*(x-1)/2%mod))%mod;
		}
		cout<<ans<<endl;
	}
	return 0;
}

我们可以将公式转化为

g(x)=ax......x=1

g(x)=a^{2}(\sum (n-1))=a^{2}(\frac{x(x-1)}{2})..........x>1

最后直接一边算一遍取模即可。

D 切割 01 串 2.0:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int dp[1000][1000];
int pre[N],suf[N];
int main(){
    int t = 1;
    while(t --){
    int n,l,r; cin >> n >> l >> r;
    string s; cin >> s;
    s = "#" + s;
    // 区间dp
    // dp[a][b] = dp[a][k] + dp[k+1][b] + 1;
    for(int i = 1; i <= n ; i ++){
        if(s[i] == '0') pre[i] = pre[i - 1] + 1;
        else pre[i] = pre[i - 1];
    }
    for(int i = 1 ; i <= n ; i ++){
        if(s[i] == '1') suf[i] = suf[i - 1] + 1;
        else suf[i] = suf[i - 1];
    }
    for(int len = 2 ; len <= n ; len ++){
        for(int i = 1 ; i <= n - len + 1; i ++){
            int j = i + len - 1;
            for(int k = i ; k < j ; k ++){
                int q0 = pre[k] - pre[i - 1];
                int q1 = suf[j] - suf[k];
                int res = abs(q0 - q1);
                if(res >= l && res <= r)
                    dp[i][j] = max(dp[i][j],dp[i][k] + dp[k + 1][j] + 1);
            }
        }
    }
    cout << dp[1][n];
    }
}

比赛时这题一直想用递归,根本没去想是dp,甚至是我练过的区间dp,导致我用递归一直暴内存,怎么优化都过不了。其实细想想这题确实就是区间dp,因为从小区间推导到大区间就免去了对一次切割产生两个子段进行·递归的过程,详情可以见代码。

 E and xor or:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+5;
ll a[N];
ll n,k1,k2;
ll work(int x){
	ll ans=0,cnt=0;
	for(int i=1;i<=n;i++){
		bool flag=true;
		for(int j=x;j<=60;j++){
			int u=a[i]>>j&1;
			int v=a[i-1]>>j&1;
			if(u!=v){
				flag=false;
			}
		}
		if(flag)cnt++;
		else{
			ans+=cnt*(cnt+1)/2;
			cnt=1;
		}
	}
	ans+=cnt*(cnt+1)/2;
	return ans;
}
int main(){
	
	cin>>n>>k1>>k2;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	cout<<work(k2)-work(k1)<<endl;
	return 0;
}

看了题解发现这题还挺简单,

利用前缀和的思想,用所有结果小于 2^k2的子数组个数 - 所有结果小于2^k1的子数组个数,即为答案。

发现这个  2^k 刚好只有一位(二进制下),要结果小于它,则必须满足在二进制中 k ~ 60 位中不能有 1。 根据题目条件,满足不能有 1 即这个子数组元素在k ~ 60位的每一位不能同时存在 1 和 0。

F 绝妙的手法(待补):

看了下题解的代码直接给我吓跑了,代码量还挺大的。

后记:

  话说后天就考高数了我还一道题没写是不是有点不务正业了(

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

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

相关文章

LLM基础模型系列:Prompt-Tuning

------->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<------ 大型预训练语言模型的规模不断扩大&#xff0c;在许多自然语言处理 &#xff08;NLP&#xff09; 基准测试中取得了最先进的结果。自GPT和BERT开发以来&#xff0c;标准做法一直是在下游…

802.11ax RU - 传输的最小单元

子载波 无线信号是加载在某个固定频率上进行传输的&#xff0c;这个频率被称为载波。802.11标准中&#xff0c;对传输频率有更新的划分&#xff0c;而这些划分的频率被称为子载波。Wi-Fi 6中&#xff0c;以20Mhz信道为例&#xff0c;20Mhz信道被划分成256个子载波&#xff0c;…

Go-知识测试-子测试

Go-知识测试-子测试 1. 介绍2. 例子3. 子测试命名规则4. 选择性执行5. 子测试并发6. testing.T.Run7. testing.T.Parallel8. 子测试适用于单元测试9. 子测试适用于性能测试10. 总结10.1 启动子测试 Run10.2 启动并发测试 Parallel 建议先看&#xff1a;https://blog.csdn.net/a…

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud【翻译与解读】

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud 摘要 特征提取和匹配是许多机器人视觉任务的基本组成部分&#xff0c;如 2D 或 3D 目标检测、识别和配准。2D 特征提取和匹配已取得巨大成功。然而&#xff0c;在 3D 领域&#xff0c;当前方法由于描述性差…

手机大模型能否撑起“全村的希望”?

2023年&#xff0c;ChatGPT、SD的火爆带火了AI赛道。但现有的AI痛点则是&#xff1a;操作复杂&#xff0c;需要网络&#xff0c;大家对本地AI的呼声越来越高。也因此产生了AI PC和手机上装上大模型。手机上装大模型&#xff0c;确实会对现在低迷的手机市场带来一些影响&#xf…

链路追踪系列-02.演示zipkin

当本机启动docker es zipkinServer之后&#xff1a; 启动3个项目&#xff1a;先eureka-server&#xff0c;再 PaymentMain8001,… 浏览器打开&#xff1a;http://localhost:9001/consumer/payment/zipkin consumer代码 &#xff1a; provider: 此时查询es:

安全防御----防火墙综合实验2

安全防御----防火墙综合实验2 一、题目 二、实验要求&#xff1a; 1&#xff0c;DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00 - 18&#xff1a;00&#xff09;可以访问&#xff0c;生产区的设备全天可以访问. 2&#xff0c;生产区不允许访…

微积分-导数7(关联变化率)

例一 空气被充入一个球形气球中&#xff0c;使其体积以每秒100立方厘米的速度增加。当气球的直径为50厘米时&#xff0c;气球半径的增加速度是多少&#xff1f; 解答&#xff1a;球体的体积公式为 V 4 3 π r 3 V \frac{4}{3}\pi r^3 V34​πr3 为了使用给定的信息&#x…

Java中标识符和关键字

1.标识符 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }上述代码中在public class 后面的HelloWorld称为类名&#xff0c;main称为方法名&#xff0c;也可以将其称为标识符&#xff0c;即&#xff1a;在程…

数组和对象的解构

1.解构的理解 解构是ES6提供的一种新提取数据的模式&#xff0c;它允许我们从数组或对象中有针对性拿到想要的数据。这种方式让数据访问和赋值变得更加简洁和直观。 2.数组的解构 数组解构允许直接从数组中提取值&#xff0c;并将这些值赋给声明的变量。这避免了使用索引来访…

802.11be MRU - 多资源单元

Wi-Fi 6中引入了OFDMA技术&#xff0c;频率资源以RU(Resource Unit)为粒度进行分配&#xff0c;Wi-Fi 6中支持26/52/106/242/484/996/2x996 Tone共计7种RU。Wi-Fi 7由于引入了320MHz 信道&#xff0c;则会多一种RU类型。不同信道带宽下&#xff0c;不同类型RU的数量如下图所示。…

通用型I2C接口的应用之综合应用(N32G45XVL-STB)

通用型I2C接口的应用之综合应用&#xff08;N32G45XVL-STB&#xff09; 目录 概述 1 软硬件接口 1.1 硬件接口 1.2 开发软硬件信息 1.3 SHT-20模块电路 1.4 0.9寸OLED模块介绍 2 驱动接口实现 2.1 SHT20驱动接口 2.2 OLED驱动接口 3 应用接口实现 3.1 软件框架 3.…

捷配笔记-PCB阻焊颜色对产品有什么影响?

阻焊层也称为阻焊层或阻焊剂。它是一种薄的聚合物层&#xff0c;应用于&#xff08;PCB&#xff09;。阻焊层的目的是保护PCB表面&#xff0c;并有助于防止焊桥。焊桥是两个导体之间的无意连接&#xff0c;通常是由于存在一小块焊料。需要注意的是&#xff0c;阻焊层被视为其单…

SSM整合及使用

SSM整合 介绍 SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架集由Spring、MyBatis两个开源框架整合而成&#xff08;SpringMVC是Spring中的部分内容&#xff09;&#xff0c;常作为数据源较简单的web项目的框架。 步骤 SSM整合主要是将各个框架的核心组件都交给sprin…

【机器学习】和【人工智能】在航空航天中的应用

作者主页: 知孤云出岫 目录 引言机器学习和人工智能在航空航天中的应用1. 预测性维护2. 飞行路径优化3. 自动驾驶飞行器 未来展望1. 增强人机协作2. 更智能的空中交通管理3. 高效的航空制造 结论参考文献 引言 随着科技的迅猛发展&#xff0c;机器学习和人工智能&#xff08;…

Goland 通道

channel通道 目录 channel通道 channel介绍 channel基本使用 有缓存通道和无缓存通道的区别 通道的初始化&#xff0c;写入数据到通道&#xff0c;从通道读取数据及基本的注意事项 channel的关闭和遍历 channel的关闭 为什么关闭 如何优雅地关闭通道 channel的遍历 chan…

亚马逊插件安装教程,新手必学的两个选品步骤

亚马逊插件安装教程&#xff0c;跟卖新手必学&#xff0c;选品两个步骤。 大家好&#xff0c;今天讲下erp的插件下载和跟卖采集。erp更新到13.8版本了。 点击右上角的插件下载&#xff0c;已经下载到桌面了&#xff0c;已被压缩。 点击设置&#xff0c;选择扩展&#xff0c;…

python-亲和数(赛氪OJ)

[题目描述] 古希腊数学家毕达哥拉斯在自然数研究中发现&#xff0c;220 的所有真约数(即不是自身的约数)之和为&#xff1a; 1245101120224455110&#xff1d;284 。 而 284 的所有真约为 1 、 2 、 4 、 71 、 142 &#xff0c;加起来恰好为 220 。人们对这样的数感到很惊奇&a…

【研路导航】重庆大学计算机保研面试真题分享交流

写在前面 在保研的道路上&#xff0c;面试是非常重要的一环。这里是成功保研到重庆大学的学长的计算机保研面试的部分真题及详细解答 ! Q 快速排序和合并排序&#xff1a; 快速排序(quicksort) 和合并排序(merge sort) 两种方法都将输入的待排序序列划分为2个子序列&#xf…

centos单机配置多个内网IP地址

centos单机配置多个内网IP地址 引配置1. 查看当前网络IP配置2. 打开网络配置目录3. 设置静态IP4. 编辑ifcfg-eno1:15. 重启网络配置 引 同一个局域网&#xff0c;但是对接的多个子系统使用了不同的网段&#xff0c;如一个系统主机IP地址是192.168.10.1&#xff0c;另一个系统主…