202305 CSP认证

202305-1 重复局面
第一题直接干

#include<bits/stdc++.h>
using namespace std;
unordered_map<string, int> chess;
int main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);string line, str = ""; int n;cin >> n;while(n --){str = "";for(int i = 0;i < 8;i ++){cin >> line;str += line;}if(!chess.count(str)) chess[str] = 0;chess[str] ++;cout << chess[str] << endl;}return 0;
}

202305-2 矩阵运算
这道题算是我近几年来唯一一道还没有做的第二题,当时没做是觉得肯定会超时

其实考察的就是一个简单的算法知识,如何处理矩阵乘法。
假设矩阵A(m * n) 和 B(n * m)相乘,则其时间复杂度O(n) = m * n * m
也就是如果本题按照它所给的矩阵乘法顺序计算的话,时间复杂度是n * d * n会超时,所以这里改变矩阵运算的顺序即可。不要被点乘迷晕了以为不能替换,它给的式子是个变体,原型是:
在这里插入图片描述

这个式子就很明显上面三个矩阵运算的顺序其实是把括号打在左二和右二都是可以的,引入W点乘其实就是除以一个常数的作用而已,不用纠结

最后提交的满分结果如下:

在这里插入图片描述

满分代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e4 + 10;
const int D = 25;
int Q[N][D], KT[D][N], V[N][D], W[N];
int main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n, d; cin >> n >> d;for(int i = 0;i < n;i ++)for(int j = 0;j < d;j ++)cin >> Q[i][j];for(int j = 0;j < n;j ++)for(int i = 0;i < d;i ++)   //这里容易出错 KT的大小是d x n, 始终用(i,j)表示数组中的元素cin >> KT[i][j]; for(int i = 0;i < n;i ++)for(int j = 0;j < d;j ++)cin >> V[i][j];for(int i = 0;i < n;i ++)cin >> W[i];//矩阵乘法 KT(dn) x V(nd)  O(n) = nddll temp1[D][D];for(int i = 0;i < d;i ++){for(int j = 0;j < d;j ++){//(i,j) 是KT的第i行乘V的第j列的和ll sum = 0;for(int u = 0;u < n; u ++){sum += (KT[i][u] * V[u][j]);}temp1[i][j] = sum;}}//矩阵乘法Q(nd) x temp1(dd) O(n) = nddll temp2[N][D];for(int i = 0;i < n;i ++){for(int j = 0;j < d;j ++){ll ans = 0;for(int u = 0;u < d;u ++){ans += (Q[i][u] * temp1[u][j]);}temp2[i][j] = ans;}}//计算点乘for(int i = 0;i < n;i ++){for(int j = 0;j < d;j ++){temp2[i][j] *= W[i];}}for(int i = 0;i < n;i ++){for(int j = 0;j < d;j ++){cout << temp2[i][j] << " ";}cout << endl;}return 0;
}

OK顺利步入第三题
这道题目我记得我第一遍看的时候就因为审题没有看明白就完全放弃了。

题目看起来很复杂!但无论如何在考场上都要静下心去读题!
本题考察的就是位运算。对于输入的一些字节流(每两个字符视作一个字节),按照题目所给的条件进行运算。

先解释一下题目吧。我觉得在这里要明确一点,题目明确说了给的输入一定是合法的!!!所以不用去纠结判断的事情,这样会让思路更加混乱。基于这一点,引导区的内容可以直接忽略,因为我们只需要解码数据区即可,而且只要保证解码过程中的代码逻辑准确,就不会有差错

本题看似有非常多的字符,但是在合法的前提下,我们其实只需要对首字节做判断。
判断的第一个就是针对于低两位,我们可以直接用位运算实现,也就是num & 3

  1. 如果首字节的低两位是00:此时代表字面量。很简单不要害怕!!针对高六位再次判断,在某个数值范围内直接得到l;在另外一个数值范围内需要额外读到下面的一个字节,计数就好啦!!
  2. 如果首字节的低两位是01:回溯。按照题目所给操作进行即可
  3. 如果首字节的低两位是10:回溯。按照题目所给操作进行即可
  4. 不可能有11的低两位!保证输入合法

其实操作的实现全都依赖于位运算

  • >> & <<:这个很常用。比方说在本题中,首字节的低两位只涉及到类型,在和3在按位与之后低两位是没用的,此时我直接移位,num >>= 2,只保留高六位即可;还有高三位和下一个输入的字节的八位组合成一个数字的时候,也采用了移位操作
  • &:按位与操作可以保留对应数位,因为1 & 1 = 1,0 & 1 = 0.也就是说和1做与运算是可以保留当前位的

本题难度其实真的不大,重点在看懂题目以及明白C++中的位运算
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;int s;           //输入的字节数
char bit4[2];   //两个字符构成一个字节,这里用一个字符数组来存储一个字节
int k = 0;     //用来计数换行的
string str = "";    //用来存储已经输出的字符,用于回溯//将一个字符转化为十进制数
int trans_10(char ch)
{if(ch >= '0' && ch <= '9') return ch - '0';if(ch >= 'a' && ch <= 'f') return ch - 'a' + 10;
}
//打印字面量
void Print(int l)
{while(l --){cin >> bit4[0] >> bit4[1]; s --;str += bit4[0], str += bit4[1];cout << bit4[0] << bit4[1];k ++;if(k == 8) { cout << endl; k = 0; }}
}
void trace(int o, int l)
{cout <<"\no:"<<o<<"l:"<<l<<endl;int sz = str.size();int pos = sz - 2 * o;   //定位一个开始点while(l > 0){   //必须输出L个字节for(int i = pos; i < sz && l > 0; i += 2, l --){cout << str[i] << str[i + 1];k ++;if(k == 8) { cout << endl; k = 0; }str += str[i], str += str[i + 1];   //这个容易漏}}
}
int main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin >> s;while(s){cin >> bit4[0] >> bit4[1]; s --;if(!(trans_10(bit4[0]) & 8)) break;   //如果最高位为0,引导区结束}while(s){cin >> bit4[0] >> bit4[1]; s --; //首字节cout << "\n当前的首字节是"<<bit4[0]<<bit4[1]<<endl;int a = trans_10(bit4[0]), b = trans_10(bit4[1]);int num = (a << 4) + b;   //将字节转化为10进制数字int type = num & 3;   //取出后两位num >>= 2;       //只保留高六位if(type == 0){   //为字面量int l = 0;if(num <= 59) l = num + 1;else{int cnt = num - 59;   //需要向后读取cnt个字节for(int i = 0;i < cnt;i ++){cin >> bit4[0] >> bit4[1]; s --;a = trans_10(bit4[0]), b = trans_10(bit4[1]);l += ( ((a << 4) + b) << (8 * i) );//得到当前字节表示的数后,由于是小端序,需要进行相应的移位(以8位,也就是一个字节为单位)}l ++;}Print(l);}else if(type == 1){int l = num & 7;  //取后三位l += 4;num >>= 3;int o = (num << 8);cin >> bit4[0] >> bit4[1]; s --;a = trans_10(bit4[0]), b = trans_10(bit4[1]);o += ((a << 4) + b);trace(o, l);}else{int l = num + 1;int o = 0;for(int i = 0;i < 2;i ++){cin >> bit4[0] >> bit4[1]; s --;a = trans_10(bit4[0]), b = trans_10(bit4[1]);o += ( ((a << 4) + b) << (8 * i) );}trace(o, l);}}return 0;
}

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

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

相关文章

数据结构:链式队列

1.设计思想&#xff1a; 我们可以设计出以上五种队列&#xff0c;但是基于时间复杂度&#xff0c;和空间复杂度的最优解&#xff0c;我们选择入队和出队均为O(1)的&#xff0c;也就是第五种 2.结构设计 typedef struct LPNode//数据节点 {int data;//数据struct LPNode* next…

Redis消息队列与thinkphp/queue操作

业务场景 场景一 用户完成注册后需要发送欢迎注册的问候邮件、同时后台要发送实时消息给用户对应的业务员有新的客户注册、最后将用户的注册数据通过接口推送到一个营销用的第三方平台。 遇到两个问题&#xff1a; 由于代码是串行方式&#xff0c;流程大致为&#xff1a;开…

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的捕获模式(外部中断)应用

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的捕获模式(外部中断)应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 805…

【Langchain-Chatchat】部署ChatGLM3-6B-32K教程

介绍 Langchain-Chatchat这个框架可以帮助我们更容易的部署大语言模型&#xff0c;之前也写过ChatGLM传统的部署教程&#xff0c;有兴趣的可以参考 【ChatGLM3】第三代大语言模型多GPU部署指南【ChatGLM2-6B】从0到1部署GPU版本 借助Langchain-Chatchat框架&#xff0c;可以…

32串口学习

基于之前的GPIO等工程&#xff0c;后面的上手难度就简单多了&#xff0c;主要是相关寄存器的设置。 void USART1_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART1 clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph…

计算机网络:信道复用技术概念解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

数据结构从入门到精通——希尔排序

希尔排序 前言一、希尔排序( 缩小增量排序 )二、希尔排序的特性总结三、希尔排序动画演示四、希尔排序具体代码实现test.c 前言 希尔排序是一种基于插入排序的算法&#xff0c;通过比较相距一定间隔的元素来工作&#xff0c;各趟比较所用的距离随着算法的进行而减小&#xff0…

【前端】Web API

1.Web API 简介 JS分为三大部分&#xff1a; ESCMScript&#xff1a;基础语法部分DOM API&#xff1a;操作页面结构BOM API&#xff1a;操作浏览器 Web API包含 DOM BOM 2.DOM基本概念 DOM全称 Document Object Mod…

最短路算法

数据结构、算法总述&#xff1a;数据结构/算法 C/C-CSDN博客 目录 朴素dijkstra算法 堆优化版dijkstra算法 Bellman-Ford算法 spfa 算法&#xff08;队列优化的Bellman-Ford算法&#xff09; spfa判断图中是否存在负环 floyd算法 朴素dijkstra算法 思路&#xff1a; 集合…

Linux相关命令(2)

1、W &#xff1a;主要是查看当前登录的用户 在上面这个截图里面呢&#xff0c; 第一列 user &#xff0c;代表登录的用户&#xff0c; 第二列&#xff0c; tty 代表用户登录的终端号&#xff0c;因为在 linux 中并不是只有一个终端的&#xff0c; pts/2 代表是图形界面的第…

长三角科技盛会“2024南京国际人工智能,机器人,自动驾驶展览会”

2024南京国际人工智能,机器人,自动驾驶展览会 2024 Nanjing International Ai, Robotics, Autonomous Driving Expo 时间:2024年11月22-24日 地点:南京国际博览中心 南京&#xff0c;这座历史悠久的文化名城&#xff0c;如今正站在新一轮科技产业变革的前沿&#xff0c;以人工…

院子摄像头的监控

院子摄像头的监控和禁止区域入侵检测相比&#xff0c;多了2个功能&#xff1a;1&#xff09;如果检测到有人入侵&#xff0c;则把截图保存起来&#xff0c;2&#xff09;如果检测到有人入侵&#xff0c;则向数据库插入一条事件数据。 打开checkingfence.py&#xff0c;添加如下…

Springboot笔记-03

1.properties配置文件 #配制oerson的值 person.lastname张三 person.age12 person.birth2017/12/12 person.bossfalse person.dog.namedag person.dog.age15 person.maps.k1v1 person.maps.k212 person.listsa,b,c运行结果乱码 因为idea默认是utf-8编码而properties是ascall编…

Bytebase 2.14.1 - 分支 (Branching) 功能支持 Oracle

&#x1f680; 新功能 分支 (Branching) 功能支持 Oracle。为 SQL 编辑器添加了项目选择器。 新增 SQL 审核规范&#xff1a; 禁止混合 DDL、DML 语句。禁止对同一张表进行不同类型的 DML 变更 (UPDATE,INSERT,DELETE)。 &#x1f514; 重大变更 工作空间设置中的「数据访问…

大屏可视化综合展示解决方案

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.…

利用Scala与Apache HttpClient实现网络音频流的抓取

概述 在当今数字化时代&#xff0c;网络数据的抓取和处理已成为许多应用程序和服务的重要组成部分。本文将介绍如何利用Scala编程语言结合Apache HttpClient工具库实现网络音频流的抓取。通过本文&#xff0c;读者将学习如何利用强大的Scala语言和Apache HttpClient库来抓取网…

Python代码实现Excel表格转HTML文件

Excel工作簿是常用的表格格式&#xff0c;广泛用于组织、分析及展示数据。Excel文件通常需要专门的文档阅览器进行查看。如果我们想要以更兼容的方式展示Excel表格&#xff0c;可以将其转换为HTML格式&#xff0c;使其能够在各种浏览器中直接进行查看。同时&#xff0c;将Excel…

【小白入门篇1】GPT到底是怎样练成?

由于具有代表性的OpenAI公司GPT模型并没有开源&#xff0c;所以本章节是参考一些开源和现有课程&#xff08;李宏毅&#xff09;讲解ChatGPT原理。本章没有涉及到很多数学运算&#xff0c;比较适合小白了解GPT到底是怎么练成。GPT的三个英文字母分别代表Generative(生成式)&…

Git 分布式版本控制系统基本概念和操作命令

目录 Git 基本概念 功能特点 工作流程 操作命令 新建代码库 配置 增删文件 代码提交 分支 标签 查看信息 远程同步 撤销 其他 小结 Git Git 是一个开源的分布式版本控制系统&#xff0c;用于跟踪文件的变更历史。它最初由 Linux Torvalds 设计&#xff0c;用于…

php闭包应用

laravel 路由 bingTo 把路由URL映射到匿名回调函数上&#xff0c;框架会把匿名回调函数绑定到应用对象上&#xff0c;这样在匿名函数中就可以使用$this关键字引用重要的应用对象。Illuminate\Support\Traits\Macroable的__call方法。 自己写一个简单的demo: <?php <?…