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

前言:

  昨天晚上自己一个人打的小白月赛(因为准备数学期末已经写烦了),题目难度感觉越来越简单了(不在像以前一样根本写不了一点,现在看题解已经能看懂一点了),能感受到自己在不断进步,希望在暑假能更努力一点吧,,少打点游戏,多学学算法,还有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 绝妙的手法:

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

2024.7.12补:

出题人出来说这题出错了,所以不用补了。这又何尝不是另一种补完呢(

后记:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智算网络谜题,与“解密者”新华三

根据高盛研究公司&#xff08;GSR&#xff09;数据报告显示&#xff0c;AIGC将推动全球国民生产总值&#xff08;GDP&#xff09;增长7%&#xff0c;带来近7万亿美元的GDP增长&#xff0c;并在未来使生产力提高1.5%。面对如此巨大的价值涌现&#xff0c;每个行业、每家企业都希…

JAVASE进阶day07(泛型,集合,Set,TreeSet,枚举,数据结构)

泛型 1.泛型的基本使用 限制集合存储的数据类型 package com.lu.day07.generics;/*** 定义了一个泛型类* E 泛型通配字母(不固定代替真实数据类型A-Z都可以)* 常见的泛型通配字母:* E:element 元素* T:type 类型* R:return 返回值类型* K:key 键* …

CV09_深度学习模块之间的缝合教学(4)--调参

深度学习就像炼丹。炉子就是模型&#xff0c;火候就是那些参数&#xff0c;材料就是数据集。 1.1 参数有哪些 调参调参&#xff0c;参数到底是哪些参数&#xff1f; 1.网络相关的参数&#xff1a;&#xff08;1&#xff09;神经网络网络层 &#xff08;2&#xff09;隐藏层…

SvANet:微小医学目标分割网络,增强早期疾病检测

SvANet&#xff1a;微小医学目标分割网络&#xff0c;增强早期疾病检测 提出背景前人工作医学对象分割微小医学对象分割注意力机制 SvANet 结构图SvANet 解法拆解解法逻辑链 论文&#xff1a;SvANet: A Scale-variant Attention-based Network for Small Medical Object Segmen…

PHP7.4安装使用rabbitMQ教程(windows)

&#xff08;1&#xff09;&#xff0c;安装rabbitMQ客户端erlang语言 一&#xff0c;erlang语言安装 下载地址1—— 下载地址2——https://www.erlang.org/patches/otp-27.0 二&#xff0c;rabbitMQ客户端安装 https://www.rabbitmq.com/docs/install-windows &#xff08…

Python+wxauto=微信自动化?

Pythonwxauto微信自动化&#xff1f; 一、wxauto库简介 1.什么是wxauto库 wxauto是一个基于UIAutomation的开源Python微信自动化库。它旨在帮助用户通过编写Python脚本&#xff0c;轻松实现对微信客户端的自动化操作&#xff0c;从而提升效率并满足个性化需求。这一工具的出现&…

【Linux】重定向 | 为什么说”一切皆文件?“

目录 前言 1.文件描述符分配规则 2.dup2 重定向接口 3.重定向 3.1>输出重定向 3.2>>追加重定向 3.3<输入重定向 3.4 shell 模拟实现< > 3.5 理解> 4. 理解“Linux 下一切皆文件” 前言 问&#xff1a;fd 为什么默认从 3 开始&#xff0c;而不是…

深度学习-6-自编码器和去噪自动编码器和变分自编码器

参考keras基于自编码器的语音信号降噪 参考今天来介绍一下什么是去噪自动编码器(DenoisingAutoencoder) 1 keras实现自编码器图像去噪 自编码器是一种简单的人工神经网络 (ANN),经过训练可以学习输入数据的编码表示,这种无监督机制不需要标签。自编码器由两个神经网络组…

【练习】分治--归并排序

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 归并排序 代码实现 交易逆序对的总数 题目描述 ​编辑 题解 代码实…

前端Vue组件化实践:打造灵活可维护的地址管理组件

随着前端技术的不断演进&#xff0c;复杂度和开发难度也随之上升。传统的一体化开发模式使得每次小小的修改或功能增加都可能牵一发而动全身&#xff0c;严重影响了开发效率和维护成本。组件化开发作为一种解决方案&#xff0c;通过模块化、独立化的开发方式&#xff0c;实现了…

云计算【第一阶段(29)】远程访问及控制

一、ssh远程管理 1.1、ssh (secureshell)协议 是一种安全通道协议对通信数据进行了加密处理&#xff0c;用于远程管理功能SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff0c;建立在应用层和传输层基础上的安全协议。SSH客…

SQL 多变关联使用子查询去重

不去重状态 select a.*,b.recon_amt from free_settlement_first aleft join free_settlement_second b on a.settlement_first_id b.settlement_first_id 有2条数据出现了重复 使用子查询去重 select a.*,b.recon_amt from free_settlement_first aleft join free_settlem…

谈谈软件交互设计

谈谈软件交互设计 交互设计的由来 交互设计(Interaction Design)这一概念,最初是由IDEO创始人之一Bill.Moggridge(莫格里奇)1984年在一次会议上提出。他设计了世界上第一台笔记本电脑Compass,并写作出版了在交互设计领域影响深远的《Designing Interactions》一书,被称…

Azcopy Sync同步Azure文件共享

Azcopy Sync同步Azure文件共享 一、工作原理二、安装 AzCopy在 Windows 上在 Linux 上 三、资源准备1. 创建源和目标 Azure 存储账户2. 创建源和目标文件共享3. 确定路径4. 生成源和目的存储账户的共享访问签名&#xff08;SAS&#xff09;令牌配置权限示例生成的 URL 四、Azco…

AI算法14-套索回归算法Lasso Regression | LR

套索回归算法概述 套索回归算法简介 在统计学和机器学习中&#xff0c;套索回归是一种同时进行特征选择和正则化&#xff08;数学&#xff09;的回归分析方法&#xff0c;旨在增强统计模型的预测准确性和可解释性&#xff0c; 正则化是一种回归的形式&#xff0c;它将系数估…

课程的概述

课程概述 课程类型 课程理论流派 制约课程开发的因素 课程设计的概念及两种模式 课程内容 课程评价 新课程改革理念

前一段时间比较火的刷网课平台源码,带数据库和教程

前一段时间比较火的刷网课平台源码&#xff0c;带数据库和教程。 好在疫情已经结束了&#xff0c;希望今后世上再无网课。 这个代码免费提供给大家学习开发用吧&#xff0c;作为一个php的入门学习案例用用还可以。 使用办法 网站根目录解压 打开nginx.htaccess文件&#x…

社交App iOS审核中的4.3问题:深入分析与解决策略

社交App审核中的4.3问题&#xff1a;深入分析与解决策略 在iOS应用开发和审核过程中&#xff0c;开发者经常会遇到苹果审核4.3问题。这一问题往往涉及应用的设计和内容重复性&#xff0c;导致应用被拒绝上架。为了帮助开发者更好地理解和解决这一问题&#xff0c;本文将对4.3问…

FPGA设计之跨时钟域(CDC)设计篇(1)----亚稳态到底是什么?

1、什么是亚稳态? 在数字电路中,如果数据传输时不满足触发器FF的建立时间要求Tsu和保持时间要求Th,就可能产生亚稳态(Metastability),此时触发器的输出端(Q端)在有效时钟沿之后比较长的一段时间都会处于不确定的状态(在0和1之间振荡),而不是等于数据输入端(D端)的…

集训 Day 3 总结 虚树 + dfs tree + 基环树

虚树 虚树&#xff0c;顾名思义是 只关注原树上的某些 关键点&#xff0c;在保留原树祖孙关系的前提下建出的一棵边数、点数大大减少的树 适用于优化某些在整棵树上进行 d p dp dp、 d f s dfs dfs 的问题 通常是题目中出现多次询问&#xff0c;每次给出树上的一些关键点&a…