news 2026/10/6 2:50:05

J组模拟赛4补题报告

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
J组模拟赛4补题报告

总分:

第一题:30分钟,100分,第二题:30分钟,100分

第三题:1.5小时,50分,第四题:30分钟,10分

第一题和第二题成功AC,于是又用bfs做第三题,得了50分,第四题不会,然后骗分

第一题:

一道十分简单的题:

AC代码:

#include<iostream> #include<cstdio> using namespace std; int n,p[10],cnt; struct node{ int a,b,c,d; }x[100005]; int main(){ freopen("fourd.in","r",stdin); freopen("fourd.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>x[i].a>>x[i].b>>x[i].c>>x[i].d; } for(int i=1;i<=8;i++){ cin>>p[i]; } for(int i=1;i<=n;i++){ if(x[i].a>=p[1]&&x[i].a<=p[5]&&x[i].b>=p[2]&&x[i].b<=p[6]&&x[i].c>=p[3]&&x[i].c<=p[7]&&x[i].d>=p[4]&&x[i].d<=p[8]){ cnt++; } } cout<<cnt; return 0; } //20min+10min

第二题:

也是一道非常简单的模拟:思路:能和成就合成

AC代码:

#include<iostream> #include<cstdio> using namespace std; int n,a,m,t[1000005],ans[1000005],x,q; int main(){ freopen("fit.in","r",stdin); freopen("fit.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a; t[a]++; } for(int i=1;i<=n;i++){ ans[i]=t[i]; t[i+1]=t[i+1]+t[i]/2; } cin>>q; while(q--){ cin>>x; cout<<ans[x]<<"\n"; } return 0; } //15min+10min

第三题:

题意:

有两个机器人,在可能不同也可能相同的起点前往可能不同也可能相同的终点,你要给这两个机器人指令让他们共同上、下、左、右。但是不会走出边界和碰到障碍物,问最少的指令个数。

这道题一看就是BFS,但怎么BFS,这是我们就要结合题目,我们发现这两个机器人要同时进行移动(注意遇到障碍物或到达地图边界一个机器人不移动,另一个机器人移动),于是BFS要有4个元素,vis要用四维数组,AC代码如下:

#include<iostream> #include<queue> #include<cstdio> using namespace std; int n,m,x,y,xx,yy,fx[]={0,0,1,-1},fy[]={-1,1,0,0},cnt,pa,pb,qa,qb,dis[35][35][35][35]; char a[35][35]; bool vis[35][35][35][35]; queue<int> qx,qy,qxx,qyy; void bfs(int x,int y,int xx,int yy){ qx.push(x),qy.push(y),qxx.push(xx),qyy.push(yy); vis[x][y][xx][yy]=1; while(!qx.empty()){ int X=qx.front(),Y=qy.front(),XX=qxx.front(),YY=qyy.front(); qx.pop(),qy.pop(),qxx.pop(),qyy.pop(); for(int i=0;i<4;i++){ int ax=X+fx[i],ay=Y+fy[i],axx=XX+fx[i],ayy=YY+fy[i]; if(ax>n||ax<1||ay>m||ay<1||a[ax][ay]!='.'){ //C1 ax=X,ay=Y; } if(axx>n||axx<1||ayy>m||ayy<1||a[axx][ayy]!='.'){ axx=XX,ayy=YY; } if(vis[ax][ay][axx][ayy]==0){ //C2 qx.push(ax),qy.push(ay),qxx.push(axx),qyy.push(ayy); vis[ax][ay][axx][ayy]=1; dis[ax][ay][axx][ayy]=dis[X][Y][XX][YY]+1; } } } } int main(){ //freopen("sync.in","r",stdin); //freopen("sync.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } cin>>x>>y>>xx>>yy; cin>>pa>>pb>>qa>>qb; bfs(x,y,xx,yy); if(vis[pa][pb][qa][qb]==1){ //C3 cout<<dis[pa][pb][qa][qb]; } else{ cout<<"-1"; } return 0; }

C1:在BFS中,这里判断的是,如果按照方向走后出了地图或走到了障碍物上,就回到之前的位置

C2既然前面已经判定了机器人不走的情况,那现在就应该判断机器人能不能走的情况,所以只有当前这个位置没有被访问过时,才会访问

C3:当这两个机器人的终点都被访问过时,才能输出值,否则输出-1

第四题:

给你一个矩阵,求所有子矩阵上的所有数字的异或和的总和

然后这个题很显然用暴力(枚举左上和右下的坐标)会TLE,所以要进行降维打击,就是把四层循环变成三层循环,思路是这样的:

1.用两层循环,枚举一个是上界,一个是下界,每次循环求出sum。

这道题要用二进制拆分,因为二进制的每一位作异或都不会影响下一位。

我们想,如果sum[ R ] ^ sum[ L-1 ] ==1,就可以得到sum[ L-1]==1^sum[ R ]

#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,a[305][305],b[305]; long long sum[305],ans,x; int main(){ //freopen("matrix.in","r",stdin); //freopen("matrix.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } for(int i=1;i<=n;i++){ memset(b,0,sizeof(b)); for(int j=i;j<=n;j++){ for(int k=1;k<=m;k++){ b[k]^=a[j][k]; //D1 sum[k]=sum[k-1]^b[k]; } for(int p=1;p<=10;p++){ long long t[5]={1}; //D2 for(int k=1;k<=m;k++){ x=(sum[k]>>(p-1))&1; //D3 ans+=(1<<(p-1))*t[x^1]; //D4 t[x]++; } } } } cout<<ans; return 0; }

D1:当下界往下时,每一列都会出现一个新数,这时只须异或上就行

D2:这是一个桶数组,因为二进制只有0和1,所以t[5]就行

D3:这是取第p位

D4:这一位加的贡献可能不只是1,还跟第几位有关,所以(1<<(p-1))*t[x^1]

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 2:49:20

HWASan 只有十六进制地址看不懂:HarmonyOS Native 崩溃符号化排查链

HWASan 只有十六进制地址看不懂&#xff1a;HarmonyOS Native 崩溃符号化排查链 这不是一个 API 的问题 测试包出现 use-after-free 报告&#xff0c;日志里有地址却没有可读源码位置&#xff1b;开发者换了一个新编译的 so 去解析&#xff0c;得到完全错误的函数。地址只有和…

作者头像 李华
网站建设 2026/10/6 2:49:17

通信数据与视觉结果的映射,核心是**在 PLC 内存模型和视觉结果之间建立一张精确的“地址表”**,让双方对每一个字节的含义达成一致

通信数据与视觉结果的映射&#xff0c;核心是在 PLC 内存模型和视觉结果之间建立一张精确的“地址表”&#xff0c;让双方对每一个字节的含义达成一致。映射做错了&#xff0c;PLC 收到的是错位的数字&#xff0c;产线会做出错误动作。 映射的三个层次 第一层&#xff1a;数据类…

作者头像 李华
网站建设 2026/10/6 2:49:16

47.LangfuseOpenTelemetry与Prometheus分别监控什么

Langfuse、OpenTelemetry 与 Prometheus&#xff1a;分别监控什么&#xff1f; 码海寻道 大模型、智能体与 RAG 工程组件系列第 47 篇 三者都能出现在 AI 应用的监控架构里&#xff0c;但职责不同&#xff1a;Langfuse 更关注 LLM 调用和评估&#xff0c;OpenTelemetry 负责统…

作者头像 李华
网站建设 2026/10/6 2:48:11

怎么让 AI 引擎引用你的内容?抓取、理解、引用三阶段讲清楚

AI 引擎引用你的内容&#xff0c;本质上要过三道关&#xff1a;爬虫抓得到、模型读得懂、答案愿意引&#xff1b;三关缺一&#xff0c;内容就只是躺在服务器上的文本。本文把这三阶段拆开讲清楚&#xff0c;每一步给出可落地的配置位置和自查方法。 第一阶段&#xff1a;抓取—…

作者头像 李华
网站建设 2026/10/6 2:48:10

学Simulink——基于滑模变结构控制(SMC)的双向DC-AC逆变器鲁棒控制仿真

目录 手把手教你学Simulink——基于滑模变结构控制(SMC)的双向DC-AC逆变器鲁棒控制仿真 一、 引言:当“参数漂移”遇上“模式切换”——滑模控制如何化身双向变流器的“金刚不坏之身”? 二、 问题本质:双向DC-AC的“核心挑战”与“SMC协同逻辑” 1. 核心挑战 2. 协同逻…

作者头像 李华