【LGR-187-Div.4】洛谷入门赛 #23

原题链接:题目列表 - 洛谷

B3970~B3977为A~H题

目录

A. 数字取模

B. 闰年

C. 二进制

D. 小 S 大战小 Q

E. 放行李

F. 最大的和

G. 交题解

H. 更好的交换


A. 数字取模

直接模拟即可。将数字x的每一位都开一个变量存起来,再分别让每个变量对k取余,最后拼接在一起。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int x, k; cin >> x >> k;int a = x / 1000, b = x / 100 % 10, c = x / 10 % 10, d = x % 10;a %= k, b %= k, c %= k, d %= k;int ans = a * 1000 + b * 100 + c * 10 + d;cout << ans << endl;return 0;
}

B. 闰年

按照题意判断输出即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int y; cin >> y;if (y % 4 != 0||(y%100==0&&y%400!=0)||(y%3200==0&&y%172800!=0)) {cout << "No" << endl;}else if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0 && y % 3200 != 0) || (y % 172800 == 0)) {cout << "Yes" << endl;}return 0;
}

C. 二进制

写个while循环,每次输出除以2的商和余数即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n; cin >> n;while (n) {cout << n / 2 << " " << n % 2 << endl;n /= 2;}return 0;
}

D. 小 S 大战小 Q

开两个vector数组a和b,分别记录小S一组人的战力和小Q一组人的战力,再开两个变量x1和x2,并初始化为0。从1遍历到n,如果a[i]>b[i],x1++,否则x2++。最终判断x1和x2的大小进行相应输出即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n; cin >> n;vector<int> a(n + 1), b(n + 1);for (int i = 1; i <= n; i++) cin >> a[i];for (int i = 1; i <= n; i++) cin >> b[i];int x1 = 0, x2 = 0;for (int i = 1; i <= n; i++) {if (a[i] > b[i]) x1++;else if (a[i] < b[i]) x2++;}cout << x1 << " " << x2 << endl;if (x1 > x2) cout << "S" << endl;else if (x1 < x2) cout << "Q" << endl;else cout << "Tie" << endl;return 0;
}

E. 放行李

直接暴力模拟了。pos变量表示小S在数组的位置(先初始化为-1避免对后续遍历产生干扰),f判断是否有空位置放行李(如果f为1有空位置放,否则没有),t表示在左列还是在右列放行李(t为1放在左列,t为0放在右列)。

mi表示能放行李的位置和小S的最小距离,先初始化为一个比较大的数1000000。从1~n分别变量两个数组,更新mi的值,并记录是在左列(t=1)还是右列(t=2)。

因为用了两个if,所以如果左列和右列同时有空位置距离小S的最小距离一样,那么t=1就会被t=2覆盖,所以输出答案时要特判一下这种情况。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n; cin >> n;vector<int> a(n + 1), b(n + 1);for (int i = 1; i <= n; i++) cin >> a[i];for (int i = 1; i <= n; i++) cin >> b[i];int p, q; cin >> p >> q;int mi = 1000000, f = 0, pos = -1, t = 0;for (int i = 1; i <= n; i++) {if (a[i] == 0) {f = 1;if (abs(i - q) <= mi) {mi = min(mi, abs(i - q));pos = i;t = 1;}}if (b[i] == 0) {f = 1;if (abs(i - q) <= mi) {mi = min(mi, abs(i - q));pos = i;t = 2;}}}if (!f) cout << -1 << endl;else {if (a[pos] == 0 && b[pos] == 0) {cout << 0 << " " << abs(pos - q) << endl;}else if (t == 1) {cout << 0 << " " << abs(pos - q) << endl;}else if (t == 2) {cout << 1 << " " << abs(pos - q) << endl;}}return 0;
}

F. 最大的和

感觉是这场比赛最难的一题,赛时只通过了部分测试点,赛后看了题解补出来的。

开一个二维的int数组a,开一个变量ans记录答案,并初始化为-INF,开一个变量sum记录暂时的和。

分别求每一行累加的元素最大值、每一列累加的元素最大值,和主对角线(左上到右下)平行的直线(也可以是主对角线)上累加的元素的最大值,和副对角线(右上到左下)平行的直线(也可以是对角线)上累加的元素的最大值。取这四个值中最大的即可。

行和列的很好求。关键是两个对角线。

我们通过画图观察可以知道:

左上右下的对角线。对于任意一条与这个对角线平行的直线,其经过的所有格子的行数与列数之差一定相同。

//这里 i 代表正在枚举的行数与列数的差(左上到右下)
//行和列的最小值都是 1,最大值都是 n,所以这个差值最小就是 1-n,最大是 n-1
for(int i = 1-n; i <= n-1; i++) {sum = 0;//然后枚举这条线上所有格子的行数 j//那么此时列数就等于 j-ifor(int j = 1; j <= n; j++)//这里 j-i 还要判断范围,是因为要保证这个格子不能出界if(1 <= j-i && j-i <= n) sum += a[j][j-i];ans = max(ans, sum);
}

右上左下的对角线。对于任意一条与这个对角线平行的直线,其经过的所有格子的行数与列数之和一定相同。

//这里 i 代表正在枚举的行数与列数的和(右上到左下)
//行和列的最小值都是 1,最大值都是 n,所以这个和值最小就是 2,最大是 n+n=2*n
for(int i = 2; i <= 2*n; i++) {sum = 0;//然后枚举这条线上所有格子的行数 j//那么此时列数就等于 i-jfor(int j = 1; j <= n; j++)//这里 i-j 还要判断范围,是因为要保证这个格子不能出界if(1 <= i-j && i-j <= n) sum += a[j][i-j];ans = max(ans, sum);
}

完整代码实现:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 2010;
const int INF = 0x3f3f3f3f;
int n, a[N][N];signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {cin >> a[i][j];}}int ans = -INF, sum = 0;for (int i = 1; i <= n; i++) {sum = 0;for (int j = 1; j <= n; j++) {sum += a[i][j];}ans = max(ans, sum);}for (int i = 1; i <= n; i++) {sum = 0;for (int j = 1; j <= n; j++) {sum += a[j][i];}ans = max(ans, sum);}for (int i = 1 - n; i <= n - 1; i++) {sum = 0;for (int j = 1; j <= n; j++) {if (j - i >= 1 && j - i <= n) sum += a[j][j - i];}ans = max(ans, sum);}for (int i = 2; i <= 2 * n; i++) {sum = 0;for (int j = 1; j <= n; j++) {if (i - j >= 1 && i - j <= n) sum += a[j][i - j];}ans = max(ans, sum);}cout << ans << endl;return 0;
}

G. 交题解

直接读入一个字符串,然后遍历字符串,如果是小写字母(s[i] >= 'a' && s[i] <= 'z')或者大写字母(s[i] >= 'A' && s[i] <= 'Z')直接输出字符即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);string s; getline(cin, s);for (int i = 0; i < s.size(); i++) {if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) {cout << s[i];}}return 0;
}

H. 更好的交换

这场比赛倒数第二难的题。

如果直接按题意用循环遍历交换两行元素或者交换两列元素,会TLE。

需要进行优化,我们可以观察发现,行和列之间的修改是无关的。也就可以将行和列的操作分开处理。

假设只有行操作:我们可以开一个一个数组 b[i]​ 来表示当前第 i 行里所存储的是初始的哪一行。那么,对于一次交换 x 行和 y 行的操作,我们只需要交换 b[x]​ 和 b[y]​ 即可:

假设只有列操作:我们可以以开一个 c[i]​ 数组,表示当前第 i 列里存储的是初始的哪一列,然后也只需要交换 c[x]​ 和 c[y]​ 即可。

由于行和列的操作互不相干,所以以上两个方法可以同时进行。也就是说,我们只要用数组 b 和 c 来代替每次的修改就可以了。

最后遍历二维数组,输出a[b[i]][c[j]]即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 1010;
int n, m;
int a[N][N],b[N],c[N];signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> m;for (int i = 1; i <= n; i++) {b[i] = c[i] = i;for (int j = 1; j <= n; j++) {cin >> a[i][j];}}while (m--) {int op, x, y;cin >> op >> x >> y;if (op == 1) swap(b[x], b[y]);else if (op == 0) swap(c[x], c[y]);}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {cout << a[b[i]][c[j]] << " ";}cout << endl;}return 0;
}

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

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

相关文章

C语言 | Leetcode C语言题解之第108题将有序数组转换为二叉搜索树

题目&#xff1a; 题解&#xff1a; struct TreeNode* helper(int* nums, int left, int right) {if (left > right) {return NULL;}// 选择任意一个中间位置数字作为根节点int mid (left right rand() % 2) / 2;struct TreeNode* root (struct TreeNode*)malloc(sizeo…

ElasticSearch IK分词器的安装、词典扩展与停用

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;云原生与服务部署-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 ​编辑 1. 前言 2. IK分词器安装 3. IK分词器词典扩展与停用 4. 总…

汽车整车检测的原由(北重试验平台制造厂家)

汽车整车检测是指对整车系统和构造各部分的性能、可靠性、安全性等方面进行全面检查和评估的过程。它是在汽车生产制造和销售使用环节中&#xff0c;为了保障驾驶安全和质量而必不可少的一项检测和评估工作。 1. 提升行车安全 汽车整车检测能够全面评估车辆的性能和安全性&…

音视频-常用的分析工具介绍-连续补充

目录 1&#xff1a;Audacity 2&#xff1a;MediaInfo 3&#xff1a;MP4Box 4&#xff1a;hexinator 5&#xff1a;Adobe Audition 6&#xff1a;VideoEye 7&#xff1a;YUVplayer &#xff08;YUV/RGB播放器&#xff09; 在做音视频分析时&#xff0c;经常用到各种分析工…

【无标题】思科交换路由中路由引入实验指南

路由引入是网络设计中的一个重要概念&#xff0c;它允许不同路由协议之间的路由信息交换。在思科网络设备中&#xff0c;路由引入可以增强网络的连通性和效率。本文将介绍路由引入的基本概念&#xff0c;并通过一个实验来演示如何在思科路由器中实现路由引入。 ## 路由引入的基…

头歌05-子集树实验-01背包

""" 题目&#xff1a;有n个重量分别为w{w_1,w_2,…,w_n}的物品&#xff0c;他们的价值分别为v{v_1,v_2,…,v_n}&#xff0c;给定一个容量为G的背包。 设计从这些物品中选取一部分物品放入该背包的方案&#xff0c;每个物品要么选中要么不选中&#xff0c;要求选…

读书笔记整理

1.对天才而言&#xff0c;任何努力都如做游戏般容易和有趣&#xff0c;兴趣是发展的原动力。从这个角度来看&#xff0c;通过普通人的劳动是无法创造天才的。 2.让孩子理解语法是很困难的。苦背不如练才是行之有效的办法。孩子们永远是故事迷&#xff0c;在教孩子们外语时&…

sqlserver查看正在执行的语句,锁,内存,cpu占用多等

sqlserver查看正在执行的语句 SELECT [Spid] session_Id ,ecid ,[Database] DB_NAME(sp.dbid) ,[User] nt_username ,[Status] er.STATUS ,[Wait] wait_type ,[Individual Query] SUBSTRING(qt.TEXT, er.statement_start_offset / 2, ( CASE WHEN er.statement_end_offs…

【有手就行】使用你自己的声音做语音合成,CPU都能跑,亲测有效

此文介绍在百度飞桨上一个公开的案例&#xff0c;亲测有效。 厌倦了前篇一律的TTS音色了吗&#xff1f;打开短视频听来听去就是那几个声音&#xff0c;快来试试使用你自己的声音来做语音合成吧&#xff01;本教程非常简单&#xff0c;只需要你能够上传自己的音频数据就可以(建议…

OpenLayers中实现对ImageStatic图层的扩展以支持平铺WrapX功能

地图平铺技术概述 地图平铺&#xff08;Tiling&#xff09;是一种将大尺寸地图数据分割成小块&#xff08;瓦片&#xff09;的技术&#xff0c;这在地图服务中非常常见。它使得地图数据能高效加载和展示&#xff0c;尤其适合网络环境。通过仅加载当前视图窗口所需的地图瓦片&a…

Spring Boot Web 开发:MyBatis、数据库连接池、环境配置与 Lombok 全面解析

推荐一个AI网站&#xff0c;免费使用豆包AI模型&#xff0c;快去白嫖&#x1f449;海鲸AI 1.0 MyBatis 概述 MyBatis 是一个优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 可以帮助我们将数据库操作抽象出来&#xff0c;使得我们的代码更加简洁…

SERVER ——查询(二)

目录 5. top 6. null 7. order by 8. 模糊查询&#xff1a; 9. 聚合函数 5. top top查询&#xff1a;查询表的前几行&#xff1b;下面是代码演示&#xff1a; --top&#xff08;前面的几个记录&#xff09; select top 2 * from emp; --查询表的前两列 select top 20 percent *…

Altium Designer 软件下载与安装

AD学习之旅&#xff08;1&#xff09;— Altium Designer 20 软件下载与安装 一、前言 本次软件安装参考自&#xff1a;Altium Designer 20 AD20软件安装详解教程 凡亿 Altium公司推荐的系统配置如下&#xff1a; 64位操作系统&#xff0c;不支持32位系统&#xff1b;Windows …

MoonDream2微调指南【最小VLM】

在本指南中&#xff0c;我们将探讨如何使用计算机视觉数据集对完全开源的小型视觉语言模型 Moondream2 进行微调&#xff0c;以计数项目&#xff08;这是 GPT-4V 一直表现不一致的任务&#xff09;&#xff0c;并以一种可以依赖输出用于生产应用程序的方式进行微调。 视觉语言…

FFmpeg操作命令 - 精简版

PS&#xff1a;&#xff08;因为我只需要简单的操作&#xff0c;所以我整理出了这份笔记&#xff09; 原网址&#xff1a;30分钟带你入门&#xff0c;20个 FFmpeg操作命令&#xff0c;包你学会 - 知乎 大佬零声Github整理库整理的笔记非常的全面&#xff0c;想看完整版去上面…

求二叉树的最大深度(oJ题)

一、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二、题目思路 如果结点为空&#xff0c;则返回0。否则该树的深度为 :左子树 和右子树 中深度大的那个再加上1&#xff0c;依次类推&#xff0c;递归下去 三、题目代码 //树的深度计算方法是: 左子树 和…

MySql:多表设计-关联查询

目录 多表设计 代码 运行 数据库设计范式 设计三范式 1、第一范式&#xff1a; 2、第二范式&#xff1a; 3、第三范式&#xff1a; 多表设计_关联查询 外键 外键约束 代码 运行 注意&#xff1a; 应用 代码 运行 代码 运行 关联查询 含义&#xff1a; …

「动态规划」下降路径最小和

力扣原题链接&#xff0c;点击跳转。 有一个nn的方阵matrix。从这个矩阵的最上面那一行的某一个元素开始&#xff0c;下降到最下面那一行的某一个元素。每次只能走到左下方、正下方和右下方这三者之一&#xff0c;也就是说&#xff0c;从(i,j)只能到达(i1,j-1)、(i1,j)和(i1,j…

Unity修改Project下的Assets的子文件的图标

Unity修改文件夹的图标 示例&#xff1a; 在右键可以创建指定文件夹。 github链接 https://github.com/SeaeeesSan/SimpleFolderIconCSDN资源的链接 https://download.csdn.net/download/GoodCooking/89347361 去GitHub下载支持原作者哦。重要的事情 截图来自GitHub 。 U…

【高阶数据结构】跳表

文章目录 跳表1. 什么是跳表-skiplist2. skiplist的效率如何保证&#xff1f;3.skiplist的实现4.skiplist跟平衡搜索树和哈希表的对比 跳表 1. 什么是跳表-skiplist skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价…