### 2024 江西省赛题解(A,C,D,G,H,J,K,L) BEFI待补

A.

输出 a + b + c a+b+c a+b+c 即可。

void slove () {int a, b, c;cin >> a >> b >> c;cout << (a + b + c) << endl;
}
B.
C.

如果 ∑ i = 1 n a i = S \sum_{i=1}^{n}a_i=S i=1nai=S 那么存在所有人说的都是真话的可能。

否则,我们可以假设 n − 1 n-1 n1 个人说的是真话,最后一个人是假话。

void slove () {int n, s;cin >> n >> s;vector <int> a(n + 1);for (int i = 1; i <= n; i++) {cin >> a[i];s -= a[i];}if (s == 0) cout << n << endl;else cout << n - 1 << endl;
}
D.

x , y x,y x,y 的最大公约数是 d d d,最小公倍数是 l c m lcm lcm,则有 x = k 1 d , y = k 2 d , l c m = x y d x=k_1d,y=k_2d,lcm=\frac{xy}{d} x=k1d,y=k2d,lcm=dxy

思考一个问题,对 x , y x,y x,y 进行操作后,它们求和会变大还是变小?

x + y = ( k 1 + k 2 ) d x+y=(k_1+k_2)d x+y=(k1+k2)d d + l c m = ( k 1 k 2 + 1 ) d d+lcm=(k_1k_2+1)d d+lcm=(k1k2+1)d

对于任意正整数都有 k 1 + k 2 ≤ k 1 k 2 + 1 k_1+k_2\leq k_1k_2+1 k1+k2k1k2+1。所以我们能用操作就用操作。

当什么时候取等号?设 ( k 1 ≤ k 2 ) (k_1\leq k_2) (k1k2),则当且仅当 k 1 = 1 k_1=1 k1=1 时取等号,也就是 x x x y y y 的因子时取等号。

往更本质思考, g c d gcd gcd 的操作是把 x , y x,y x,y 的每种质因子最小出现次数留下后组成的值, l c m lcm lcm 是把 x , y x,y x,y 中每种质因子的最多出现次数留下来组成的值。

当什么时候和取最大?当任意操作都会取等号的时候。

也就是当数组中任意两个数都成倍数关系的时候。

所以可以对于每种质因子,为每种质因子创建一个出现次数列表,将出现次数最多的依次从后往前分配。

使得最后的数最大,次大, ⋯ \cdots ,直到最小。

int power(int a, int b) {int s = 1;while (b) {if (b & 1) s = s * a % MOD;a = a * a % MOD;b >>= 1;}return s;
}void solve () {int n;cin >> n;map <int, vector <int>> mp;for (int i = 1; i <= n; i++) {int x;cin >> x;for (int j = 2; j * j <= x; j++) {int cnt = 0;while (x % j == 0) {x /= j;cnt ++;}if (cnt) mp[j].emplace_back(cnt);}if (x > 1) mp[x].emplace_back(1);}vector <int> ans (n + 1, 1);for (auto &[a, v] : mp) {int bnt = n;sort (v.begin(), v.end());while (v.size()) {ans[bnt--] = ans[bnt] * power(a, v.back()) % MOD;v.pop_back();}}int sum = 0;for (int i = 1; i <= n; i++) sum = (sum + ans[i]) % MOD;cout << sum << endl;}
E.
F.
G.

如果一个数是 5 5 5 的倍数,它的最后一位必须是 5 5 5 0 0 0

因为是 11 11 11 进制,不管是 11 11 11 的多少次幂,其个位数都是 1 1 1

题目给出的是 a b 表示连续 a b × 1 1 α b\times 11^{\alpha} b×11α,答案就是累加 a × b a\times b a×b 的值。

最终判断是否是 5 5 5 的倍数即可。

void solve () {int n;cin >> n;int sum = 0;for (int i = 1; i <= n; i++) {int a; char b;cin >> a >> b;if (b == 'A') {continue;} else {sum += a*(int)(b - '0');}}cout << (sum % 5 == 0 ? "Yes" : "No") << endl;
}
H.

转换为计算 K K K 中的每一位对最终答案的贡献。

最好是画图模拟这个样例。

发现 K 1 , 1 K_{1,1} K1,1 的贡献是 I I I 矩阵的 ( 1 , 1 ) ∼ ( 1 + n − k , 1 + m − l ) (1,1)\sim (1+n-k,1+m-l) (1,1)(1+nk,1+ml)

发现 K i , j K_{i,j} Ki,j 的贡献是 I I I 矩阵的 ( i , j ) ∼ ( i + n − k , j + m − l ) (i,j)\sim (i+n-k,j+m-l) (i,j)(i+nk,j+ml)

如果 I I I 矩阵的 ( i , j ) ∼ ( i + n − k , j + m − l ) (i,j)\sim (i+n-k,j+m-l) (i,j)(i+nk,j+ml) 大于 0 0 0 那么 K i , j K_{i,j} Ki,j 1 1 1 即可,如果小于 0 0 0 − 1 -1 1,否则取 0 0 0

const int N = 1e3 + 7;int I[N][N], K[N][N], S[N][N];void slove () {int n, m, k, l;cin >> n >> m >> k >> l;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> I[i][j];S[i][j] = S[i - 1][j] + S[i][j - 1] + I[i][j] - S[i - 1][j - 1];}}auto getS =[&](int x1, int y1, int x2, int y2) {return S[x2][y2] - S[x1 - 1][y2] - S[x2][y1 - 1] + S[x1 - 1][y1 - 1];};int ans = 0;for (int i = 1; i <= k; i++) {for (int j = 1; j <= l; j++) {int x1 = i, y1 = j;int x2 = i + n - k, y2 = j + m - l;int sum = getS(x1, y1, x2, y2);ans += (sum > 0 ? sum : -sum);}}cout << ans << endl;
}
I.
J.

模拟。

void solve () {string s;cin >> s;// 判断一下是不是 Thirteen Orphansstring temp = s;map <char, set<int>> mp;for (int i = 0; i < 28; i += 2) {mp[s[i + 1]].insert((int)(s[i] - '0'));}bool is_Thirteen = true;for (auto i : mp) {if (i.first == 'p' or i.first == 's' or i.first == 'm') {if (i.second.size() != 2 or !i.second.count(1) or !i.second.count(9)) {is_Thirteen = false;break;}} else {if (i.second.size() != 7) {is_Thirteen = false;break;}} }if (is_Thirteen) {cout << "Thirteen Orphans" << endl;return;}map <pair<char,char>, int> mmp;for (int i = 0; i < 28; i += 2) {mmp[pair<char,char>{s[i], s[i + 1]}]++;}bool is_Pairs = true;int bnt = mmp.size();for (auto i : mmp) {if (i.second != 2) is_Pairs = false;}if (bnt == 7 and is_Pairs) {cout << "7 Pairs" << endl;return;}cout << "Otherwise" << endl;
}
K.

输出 2 n − 1 2^{n-1} 2n1

int power (int a, int b, int mod) {int s = 1;while (b) {if (b & 1) s = s * a % mod;a = a * a % mod;b >>= 1;}return s;
}void slove () {int n;cin >> n;cout << power(2, n - 1, 998244353ll) << endl;
}
L.

首先对 K K K 个点都跑一遍单源最短路 D i j k s t r a Dijkstra Dijkstra,时间复杂度 O ( k n l o g n ) O(knlogn) O(knlogn)

需要观察到一个很重要的性质:门开和门关最多执行 2 K 2K 2K 次,其他时候都是承接上一秒的状态,对于上一秒的状态直接记录即可。门开和门关时重新计算一下每个点到哪个门是最近的。

时间复杂度是 O ( T + 2 k 2 n ) O(T+2k^2n) O(T+2k2n)

#define int long long
#define endl '\n'
#define PII pair<int,int>
#define INF 1e18
const int N = 1e5 + 7;int d[20][N], flag[20][N], a[N], door[20];
vector <PII> g[N];
int n, m, k, T;void dijkstra(int start) {int s = start;start = door[start];priority_queue <PII, vector<PII>, greater<>> q;for (int i = 1; i <= n; i++) d[s][i] = INF;d[s][start] = 0;q.push(PII{0, start});while (q.size()) {auto [road, u] = q.top();q.pop();if (flag[s][u]) continue;flag[s][u] = 1;for (auto [v, w] : g[u]) {if (d[s][v] > road + w) {d[s][v] = road + w;q.push(PII{d[s][v], v});}}}
}void slove () {cin >> n >> m >> k >> T;for (int i = 1; i <= n; i++) {cin >> a[i];}map <int, PII> mp;for (int i = 1; i <= k; i++) {int l, r;cin >> door[i] >> l >> r;mp[door[i]] = {l, r};}for (int i = 1; i <= m; i++) {int u, v, w;cin >> u >> v >> w;g[u].emplace_back(v, w);g[v].emplace_back(u, w);}for (int i = 1; i <= k; i++) {dijkstra(i);}vector <vector<int>> dp(2, vector<int>((1 << 16), -2));for (int i = 1; i <= T; i++) {int state = 0;bool is_fail = false;for (int j = 1; j <= k; j++) {auto [l, r] = mp[door[j]];if (l <= i and i <= r) {state |= (1 << j);}}if (dp[(i - 1) % 2][state] != -2) {dp[i % 2][state] = dp[(i - 1) % 2][state];cout << dp[i % 2][state] << endl;} else {int sum = 0;for (int j = 1; j <= n; j++) {int dis = INF;for (int t = 1; t <= k; t++) {if (state & (1 << t)) {dis = min(dis, d[t][j]);}}if (dis == INF) {is_fail = true;break;} else sum += a[j]*dis;}if (is_fail) dp[i % 2][state] = -1;else dp[i % 2][state] = sum;cout << dp[i % 2][state] << endl;}}
}

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

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

相关文章

java求职学习day23

MySQL 单表 & 约束 & 事务 1. DQL操作单表 1.1 创建数据库,复制表 1) 创建一个新的数据库 db2 CREATE DATABASE db2 CHARACTER SET utf8; 2) 将 db1 数据库中的 emp 表 复制到当前 db2 数据库 1.2 排序 通过 ORDER BY 子句 , 可以将查询出的结果进行排序 ( 排序只…

markdown公式特殊字符

个人学习笔记 根号 在 Markdown 中&#xff0c;要表示根号 3&#xff0c;可以使用 LaTeX 语法来实现。常见的有以下两种方式&#xff1a; 行内公式形式&#xff1a;使用一对美元符号 $ 将内容包裹起来&#xff0c;即 $\sqrt{3}$ &#xff0c;在支持 LaTeX 语法渲染的 Markdow…

git笔记-简单入门

git笔记 git是一个分布式版本控制系统&#xff0c;它的优点有哪些呢&#xff1f;分为以下几个部分 与集中式的版本控制系统比起来&#xff0c;不用担心单点故障问题&#xff0c;只需要互相同步一下进度即可。支持离线编辑&#xff0c;每一个人都有一个完整的版本库。跨平台支持…

系统学习算法: 专题七 递归

递归算法简而言之就是当一个大问题拆分为多个子问题时&#xff0c;如果每个子问题的操作步骤都一样&#xff0c;就可以用递归&#xff0c;其中递归在递的时候要有结束条件&#xff0c;不能一直递下去&#xff0c;结束条件后就归 这里不建议学习递归的时候抠细节&#xff0c;还…

C++中常用的十大排序方法之1——冒泡排序

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C中常用的排序方法之——冒泡排序的相关…

OpenEuler学习笔记(十五):在OpenEuler上搭建Java运行环境

一、在OpenEuler上搭建Java运行环境 在OpenEuler上搭建Java运行环境可以通过以下几种常见方式&#xff0c;下面分别介绍基于包管理器安装OpenJDK和手动安装Oracle JDK的步骤。 使用包管理器安装OpenJDK OpenJDK是Java开发工具包的开源实现&#xff0c;在OpenEuler上可以方便…

【二叉搜索树】

二叉搜索树 一、认识二叉搜索树二、二叉搜索树实现2.1插入2.2查找2.3删除 总结 一、认识二叉搜索树 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种特殊的二叉树&#xff0c;它具有以下特征&#xff1a; 若它的左子树不为空&#xff0c;则…

洛谷P3372 【模板】线段树 1以及分块

【模板】线段树 1 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m&#xff0c;分别表示该数列数字的个数和操作的总个数。 …

Linux运维之Linux的安装和配置

目录 Linux的基本概念&#xff1a; 1.为什么要使用Linux&#xff1f; 2.什么是Linux&#xff1f; Linux的安装和配置&#xff1a; 1.下载Linux的虚拟机和镜像文件&#xff1a; 1.1下载虚拟机 1.2下载镜像文件 2.在虚拟机或者物理机中安装Linux操作系统 3.配置虚拟机的…

【ArcMap零基础训练营】01 ArcMap使用入门及绘图基础

ArcMap入门及使用技巧 230106直播录像 ArcMap使用技巧及制图入门 ArcGIS的安装 本次教学使用的ArcMap版本为10.7&#xff0c;建议各位安装ArcGIS10.0及其以上版本的英文版本。 下载及安装详细教程可参考ArcGIS 10.8 for Desktop 完整安装教程 麻辣GIS 改善使用体验的几个操作…

程序员学英文之At the Airport Customs

Dialogue-1 Making Airline Reservation预定机票 My cousin works for Xiamen Airlines. 我表哥在厦航上班。I’d like to book an air ticket. 我想预定一张机票。Don’t judge a book by its cover. 不要以貌取人。I’d like to book / re-serve a table for 10. 我想预定一…

Python 写的几个经典游戏 新年放烟花、 贪吃蛇、俄罗斯方块、超级玛丽、五子棋、蜘蛛纸牌

0、新年放烟花 import pygame import random import math# 初始化Pygame pygame.init()# 设置窗口 WIDTH 800 HEIGHT 600 screen pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("新年放烟花")# 颜色定义 BLACK (0, 0, 0) WHITE (255, 2…

Python Typing: 实战应用指南

文章目录 1. 什么是 Python Typing&#xff1f;2. 实战案例&#xff1a;构建一个用户管理系统2.1 项目描述2.2 代码实现 3. 类型检查工具&#xff1a;MyPy4. 常见的 typing 用法5. 总结 在 Python 中&#xff0c;静态类型检查越来越受到开发者的重视。typing 模块提供了一种方式…

14-8C++STL的queue容器

一、queue容器 (1)queue容器的简介 queue为队列容器&#xff0c;“先进先出”的容器 (2)queue对象的构造 queue<T>q; queue<int>que Int;//存放一个int的queue容器 queue<string>queString;//存放一个string的queue容器 (3)queue容器的push()与pop()方…

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

PyCharm接入DeepSeek实现AI编程

目录 效果演示 创建API key 在PyCharm中下载CodeGPT插件 配置Continue DeepSeek 是一家专注于人工智能技术研发的公司&#xff0c;致力于开发高性能、低成本的 AI 模型。DeepSeek-V3 是 DeepSeek 公司推出的最新一代 AI 模型。其前身是 DeepSeek-V2.5&#xff0c;经过持续的…

C语言指针专题一 -- 指针基础原理

目录 1. 指针概念 地址和变量 指针 2. 指针的声明与初始化 3. 指针的使用 指针访问 指针的运算 指针与数组 指针与函数 4. 编程实例 5. 指针的常见陷阱与防御 6. 总结 1. 指针概念 地址和变量 在C语言中&#xff0c;地址和变量是两个基本但非常重要的概念。 1. 变…

【Python】已解决:ModuleNotFoundError: No module named ‘cv2’

个人简介&#xff1a;某不知名博主&#xff0c;致力于全栈领域的优质博客分享 | 用最优质的内容带来最舒适的阅读体验&#xff01;文末获取免费IT学习资料&#xff01; &#x1f345; 文末获取更多信息 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅收藏 &#x…

从0开始,来看看怎么去linux排查Java程序故障

一&#xff0c;前提准备 最基本前提&#xff1a;你需要有liunx环境&#xff0c;如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后&#xff0c;你还需要安装jdk和配置环境变量 1. 安装JDK&#xff08;以OpenJDK 17为例&#xff09; 下载JDK…

设计模式-建造者模式、原型模式

目录 建造者模式 定义 类图 优缺点 角色 建造者模式和工厂模式比较 使用案例 原型模式 定义 类图 优缺点 应用场景 应用类型 浅克隆 深克隆 建造者模式 定义 将一个复杂的对象的构造与它的表示分离&#xff0c;使同样的构建过程可以创建不同的表示&#xff0c;…