当前位置: 首页 > news >正文

2024.5.14晚训题解

非线性结构没懂的同学多去看看课程回放。

A题Overall Winner 题解
很基础的题目,输入字符串,用计数器去统计一下就好了。
因为赢的次数一样的时候优先判断前面的那个人赢,所以说两个人赢的次数相同的时候我们不必 去记录胜者。

#include<bits/stdc++.h>
using namespace std;
char s[200];
int main() {int n;scanf("%d%s",&n,s+1);int T=0;int A=0;char win;for(int i=1;i<=n;i++){if(s[i]=='A')A++;else T++;if(A>T)win='A';else if(A<T)win='T';}printf("%c",win);return 0;
}

B题Fill the Gaps 题解
不难发现,题目所谓的每次操作距离序列起点最近的相邻元素差的绝对值不为1的那一对 A i Ai Ai 其实就是从左往右处理过去找一找就行了。

每找到一对这样子的 A i Ai Ai 输出两数中间的所有数字,正序或者倒序

#include<bits/stdc++.h>
using namespace std;
int A[200];
int main() {int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&A[i]);}printf("%d ",A[1]);for(int i=2;i<=n;i++){if(abs(A[i-1]-A[i])!=1){if(A[i]>A[i-1]){for(int j=A[i-1]+1;j<A[i];j++){printf("%d ",j);}}else{for(int j=A[i-1]-1;j>A[i];j--){printf("%d ",j);}}}printf("%d ",A[i]);}return 0;
}

C题AtCoder Cards 题解
因为我们可以任意重新排列整个字符串,所以字符串的顺序并不影响这个题,我们要考虑两个字符串所包含的字母情况。

先分别记录两个字符串的字母数量,以及 @ @ @个数,因为 @ @ @符号是一种可以变的符号,注意,它只能变成atcoder ,所以有需要的时候我们再拿它来变。枚举26个字母,判断两个字符串关于这些字母的数量是不是一样的,如果不一样,那就要用@来变,如果变不出来那就是No ,注意变了以后现有的@数量要对应减去。

#include<bits/stdc++.h>
using namespace std;
char A[200005];
char B[200005];
int num_A[30];
int num_B[30];
bool vis[30];
int main() {scanf("%s%s",A+1,B+1);int n=strlen(A+1);vis['a'-'a'+1]=1;vis['t'-'a'+1]=1;vis['c'-'a'+1]=1;vis['o'-'a'+1]=1;vis['d'-'a'+1]=1;vis['e'-'a'+1]=1;vis['r'-'a'+1]=1;int cnt_A=0;int cnt_B=0;for(int i=1;i<=n;i++){if(A[i]=='@')cnt_A++;else num_A[A[i]-'a'+1]++;	if(B[i]=='@')cnt_B++;else num_B[B[i]-'a'+1]++;}int ok=true;for(int i=1;i<=26;i++){if(num_A[i]==num_B[i])continue;if(num_A[i]>num_B[i]&&vis[i]){int le=num_A[i]-num_B[i];cnt_B-=le;if(cnt_B<0)ok=false;continue;}if(num_B[i]>num_A[i]&&vis[i]){int le=num_B[i]-num_A[i];cnt_A-=le;if(cnt_A<0)ok=false;continue;}ok=false;//程序走到这里说明 字母拥有情况不一样且变不了  }if(ok==true)printf("Yes");else printf("No");return 0;
}

D题 Bitmask 题解
又是一道关于二进制的题目,先复习一遍进制吧

X进制数其实就是满足逢X进1的数字
比如十进制数,逢十进一 , 9+1就变成了10
比如二进制数,逢二进一 ,0111 + 1 就变成了 1000 (注意这是二进制)
从右到左,每个位上面的数字看成“系数” ,从右到左每个位置的单位分别是X0 ,X1 ,X2 … 零次方就是1
所以一个X进制的数转换成十进制的数字怎么算呢?
从右到左,系数乘单位全加起来。

什么是位运算?
先看看&运算 两个数字A&B计算规则如下:
先把A B转换成长度一样的二进制串(从左往右是高位到低位)
然后对于每一位去单独做运算,1&1=1 其余为0
对应位把计算的数字落下来,就构成了答案的二进制
比如
0101110101 0101110101 0101110101 &
1101101010 1101101010 1101101010
答案0101100000

什么是或运算?
先看看 | 运算 两个数字A | B计算规则如下:
先把A B转换成长度一样的二进制串(从左往右是高位到低位)
然后对于每一位去单独做运算
1|1=1
1|0=1
0|1=1
0|0=0
对应位把计算的数字落下来,就构成了答案的二进制
比如
0101110101 0101110101 0101110101 |
1101101010 1101101010 1101101010
答案1101111111

什么是异或运算?
先看看 ^ 运算 两个数字A ^ B计算规则如下:
先把A B转换成长度一样的二进制串(从左往右是高位到低位)
然后对于每一位去单独做运算
1^1=0
1^0=1
0^1=1
0^0=0
对应位把计算的数字落下来,就构成了答案的二进制
比如
0101110101 0101110101 0101110101 ^
1101101010 1101101010 1101101010
答案1000011111

位运算(x<<i) 表示把x 从二进制位上整体左移 i 位
例如(1<<0) 表示把1的二进制整体左移0位,相当于不变
(1<<2)把1整体左移2位,也就是000001 -> 000100 答案是4

接下来我们看看这个问题咋处理
题目首先给我们一个串,含有0 ,1,?
给我们一个N。串里面的?可以任意变成0或者1
从而我们的串有一个可能值的集合T,题目问T集合里面不超过N的最大值是多少,如果没有就输出-1 .

我们思考一个问题,刚刚讲了二进制,从左到右是高位到低位。
那么我们的串,如果不是?的位置,就已经是确定的值了
所以我们的串构成的最小值的情况就是?全部取0.
我们先计算出串的最小值,枚举一遍串,先算出定值(已经固定数字的位置),然后根据贪心的思想,从最高位开始向低位枚举,寻找? ,看看当前这个?能不能变成1 加入我们的答案。注意这里所说的1是二进制某个位上面的1,不是十进制数字1 .
举例: ?01010 我们让?变1 得到101010 新增加的是 25
因此我们就看高位的?能不能变成1 ,且数值不超过N
能的话就变,不能的话就不变。
有一个知识点:
如果你的第i个位置放1,那么i以后的所有低位都放1 都没有这个2i

推理: 假如说0的位置是i
根据二进制的规则,0111111111111 这个数字 +1 构成逢二进一,才能变成 1000000000000,所以说一个高位的1,比它后面所有低位都放1 是还要大的

#include<bits/stdc++.h>
using namespace std;
char s[100];
char b[100]; 
char T[100];
char S[100];
int main(){long long int n;scanf("%s%lld",s+1,&n);int len=0;int m=strlen(s+1);long long int ans=0;for(int i=1;i<=64;i++){if(i<=64-m)S[i]='0';else S[i]=s[i-(64-m)];if(S[i]=='1'){ans=ans | (1ll << (64-i));	//这个写法是位运算,//直接把2的次方或运算上去,//因为ans一开始是0,每个二进制位都是0,0或上1这个位一定就是1}}//补齐前导0  转换成64位 if(ans>n){//  ?全是0  都比N大 printf("-1");return 0;}for(int i=1;i<=64;i++){//高位到低位 if(S[i]=='?'){//看看能不能放进去1   其余? 默认为0   if((ans|(1ll << (64-i)))<=n){ans=ans|(1ll << (64-i)); }} }printf("%lld",ans);return 0;
}

相关文章:

2024.5.14晚训题解

非线性结构没懂的同学多去看看课程回放。 A题Overall Winner 题解 很基础的题目&#xff0c;输入字符串&#xff0c;用计数器去统计一下就好了。 因为赢的次数一样的时候优先判断前面的那个人赢&#xff0c;所以说两个人赢的次数相同的时候我们不必 去记录胜者。 #include<…...

jQuery的选择器与自带函数详解

在前端开发中&#xff0c;jQuery是一个广泛使用的JavaScript库&#xff0c;它极大地简化了HTML文档遍历、事件处理、动画以及AJAX交互等操作。本文将通过一个示例页面&#xff0c;详细介绍jQuery的选择器和一些常用的自带函数。 示例代码优化 首先&#xff0c;我们来优化和完…...

Next.js与SSR:构建高性能服务器渲染应用

1. 创建项目 通过create-next-app脚手架创建一个新的Next.js项目&#xff1a; npx create-next-app my-app cd my-app2. 自动SSR 在Next.js中&#xff0c;每个.js或.jsx文件的组件都会被自动处理为SSR页面。例如&#xff0c;创建一个pages/index.js文件&#xff1a; // pag…...

什么是MVC?什么是SpringMVC?什么是三层架构?

文章目录 应用分层什么是MVC?什么是 SpringMVC&#xff1f;三层架构三层架构和MVC的关系 应用分层 在讲解什么是MVC之前&#xff0c;先来理解一下什么是应用分层。 应用分层是一种软件开发设计思想&#xff0c;将应用程序划分成N个层次&#xff0c;每个层次都分别负责自己的…...

基于springboot+vue+Mysql的在线答疑系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

ssl证书免费申请指南

同学们可以私信我加入学习群&#xff01; 正文开始 前言一、购买证书二、创建证书三、 验证证书等待出现如下页面&#xff0c;说明申请成功&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6b6c1dd11d4c467687318552da7cdbb2.png) 总结 前言 今天为大…...

Java构造方法详解

在Java方法内部定义一个局部变量时&#xff0c;必须要初始化&#xff0c;否则就会编译失败&#xff0c;如下&#xff1a; 要让上述代码通过编译&#xff0c;只需在使用a之前给a赋一个初始值即可 如果是对象&#xff1a;下面用一个日期类演示 我们没有给年月日赋值&#xff0c;…...

Spring WebFlux:响应式编程

在软件开发领域&#xff0c;随着互联网应用的规模和复杂性不断增加&#xff0c;传统的编程模型逐渐暴露出一些局限性&#xff0c;尤其是在面对高并发、大规模数据流处理等场景时。为了应对这些挑战&#xff0c;响应式编程&#xff08;Reactive Programming&#xff09;应运而生…...

uniapp、web网页跨站数据交互及通讯

来来来&#xff0c;说说你的创作灵感&#xff01;这就跟吃饭睡觉一样&#xff0c;饿了就找吃的&#xff0c;渴了就倒水张口灌。 最近一个多月实在是忙的没再更新日志&#xff0c;好多粉丝私信说之前的创作于他们而言非常有用&#xff01;受益菲浅&#xff0c;这里非常感谢粉丝…...

2024-05-10 Ubuntu上面使用libyuv,用于转换、缩放、旋转和其他操作YUV图像数据,测试实例使用I420ToRGB24

一、简介&#xff1a;libyuv 最初是由Google开发的&#xff0c;主要是为了支持WebRTC项目中的视频处理需求。用于处理YUV格式图像数据的开源库。它提供了一系列的函数&#xff0c;用于转换、缩放、旋转和其他操作YUV图像数据。 二、执行下面的命令下载和安装libyuv。 git clo…...

怎么给视频加水印?2招轻松搞定

在数字媒体时代&#xff0c;视频水印作为一种有效的版权保护手段&#xff0c;被广泛应用于各种场景。给视频添加水印不仅可以防止内容被恶意盗用&#xff0c;还能增加视频的辨识度&#xff0c;提升品牌形象。本文将为您介绍2种简单易行的方法&#xff0c;教您怎么给视频加水印&…...

SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 请求响应概述 1.1 简单参数 1.2 实体参数 2.3 数组集合参数 2.4 日期参数 2.5 json 参数 2.6 路径参数 3.0 完整代码 1.0 请求响应概述 当客户端发送不同的请求参…...

实验十 智能手机互联网程序设计(微信程序方向)实验报告

实验目的和要求 完成以下页面设计。 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; Wxml <view class"container"> <view class"header"> <view class"logo"…...

Python图形复刻——绘制母亲节花束

各位小伙伴&#xff0c;好久不见&#xff0c;今天学习用Python绘制花束。 有一种爱&#xff0c;不求回报&#xff0c;有一种情&#xff0c;无私奉献&#xff0c;这就是母爱。祝天下妈妈节日快乐&#xff0c;幸福永远&#xff01; 图形展示&#xff1a; 代码展示&#xff1a; …...

【算法优选】 动态规划之子数组、子串系列——壹

文章目录 &#x1f38b;前言&#x1f38b;最大子数组和&#x1f6a9;题目描述&#x1f6a9;算法思路&#x1f6a9;代码实现 &#x1f334;环形子数组的最大和&#x1f6a9;题目描述&#x1f6a9;算法思路&#xff1a;&#x1f6a9;代码实现 &#x1f332;乘积最大子数组&#x…...

PXE+Kickstart无人值守安装安装Centos7.9

文章目录 一、什么是PXE1、简介2、工作模式3、工作流程 二、什么是Kickstart1、简介2、触发方式 三、无人值守安装系统工作流程四、实验部署1、环境准备2、服务端&#xff1a;关闭防火墙和selinux3、添加一张仅主机的网卡4、配置仅主机的网卡4.1、修改网络连接名4.2、配IP地址4…...

C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能

文章目录 前言一、注意二、源码1. test.c源文件2. contact.h头文件3. contact.c源文件 总结 前言 C语言实现通讯录&#xff0c;包括增删改查以及动态开辟内存&#xff0c;写入文件等功能 一、注意 在通讯录菜单栏使用枚举定义PeoInfo类型时&#xff0c;每个结构体类型的成员…...

flowable多对并发网关跳转的分析

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…...

【嵌入式——QT】QT集成Ymodem协议使用UDP进行传输

【嵌入式——QT】QT集成Ymodem协议使用UDP进行传输 Ymodem协议帧的数据格式帧头包号校验 通讯过程握手信号起始帧数据帧结束帧代码块 Ymodem命令 QT实现YmodemFileTransmit.hYmodemFileTransmit.cppBootLoader.hBootLoader.cppYmodem协议源码 Ymodem协议 帧的数据格式 帧头、…...

python笔记(17)输入输出

一、标准输入与输出简介 Python通过内置的sys模块管理标准输入&#xff08;stdin&#xff09;、标准输出&#xff08;stdout&#xff09;和标准错误&#xff08;stderr&#xff09;。但对大多数简单应用而言&#xff0c;直接使用内置函数就足够了。 二、输入&#xff1a;inpu…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...