Contest3923 - 计科23级算法设计与分析上机作业-03

news/2025/3/22 14:51:50/文章来源:https://www.cnblogs.com/Thin-time/p/18786572

A.质数

题面

思路

考虑到输入数据量较大,选择线性欧拉筛预处理

示例代码

#include<bits/stdc++.h>using namespace std;#define ll long long
//#define int ll
#define pii pair<int, int>
#define all(x) x.begin(),x.end()
#define fer(i, m, n) for(int i = m; i < n; ++i)
#define ferd(i, m, n) for(int i = m; i >= n; --i)
#define dbg(x) cout << #x << ' ' << char(61) << ' ' << x << '\n'const int MOD = 1e9 + 7;
const int N = 1e5 + 2;
const int inf = 1e9;vector<bool> is_prime(N, true);
vector<int> primes;void siebe() {is_prime[0] = is_prime[1] = false;fer(i, 2, N) {if(is_prime[i]) primes.push_back(i);for(int j = 0; j < primes.size() && i * primes[j] < N; ++j) {is_prime[i * primes[j]] = false;if(i % primes[j] == 0) break;}}
}signed main() {ios::sync_with_stdio(false); cin.tie(nullptr);siebe();int t;cin >> t;while(t--){int n;cin >> n;cout << (is_prime[n] ? "yes" : "no");cout << '\n';}return 0;
}
## [B.分治法求解全排列问题](https://buctoj.com/problem.php?cid=3923&pid=1)
### 题面
![](https://img2024.cnblogs.com/blog/3460892/202503/3460892-20250322144228395-869509911.png)### 思路
分治法求全排列问题,注意输出的答案不兼容其他做法(如果是按字典序输出的做法不可行)
### 示例代码
```cpp
#include<bits/stdc++.h>using namespace std;#define ll long long
//#define int ll
#define pii pair<int, int>
#define all(x) x.begin(),x.end()
#define fer(i, m, n) for(int i = m; i < n; ++i)
#define ferd(i, m, n) for(int i = m; i >= n; --i)
#define dbg(x) cout << #x << ' ' << char(61) << ' ' << x << '\n'const int MOD = 1e9 + 7;
const int N = 2e5 + 2;
const int inf = 1e9;void perm(int n, int l, int r, vector<int>& arr) {if(l == r) {fer(i, 0, n) cout << arr[i] << " ";cout << '\n';return;}for(int i = l; i <= r; ++i) {swap(arr[l], arr[i]);perm(n, l + 1, r, arr);swap(arr[l], arr[i]);}
}signed main() {ios::sync_with_stdio(false); cin.tie(nullptr);int n;while(cin >> n) {vector<int> arr(n);fer(i, 0, n) arr[i] = i + 1;perm(n, 0, n - 1, arr);}return 0;
}

C.数的计数

题面

思路

递归处理,在处理过程中同时进行记忆化。

示例代码

#include<bits/stdc++.h>using namespace std;#define ll long long
//#define int ll
#define pii pair<int, int>
#define all(x) x.begin(),x.end()
#define fer(i, m, n) for(int i = m; i < n; ++i)
#define ferd(i, m, n) for(int i = m; i >= n; --i)
#define dbg(x) cout << #x << ' ' << char(61) << ' ' << x << '\n'const int MOD = 1e9 + 7;
const int N = 1e3 + 2;
const int inf = 1e9;vector<int> memo(N, -1);int generateNumbers(int n) {if (n == 0) return 0;if (memo[n] != -1) return memo[n];int cnt = 1;for (int i = 1; i <= n / 2; ++i) cnt += generateNumbers(i);memo[n] = cnt;return cnt;
}signed main() {ios::sync_with_stdio(false); cin.tie(nullptr);int n;cin >> n;cout << generateNumbers(n) << '\n';return 0;
}

D.循环日程表问题,《算法竞赛入门经典》P230,递归与分治,刘丽萍,CCF三级

题面

示例代码

#include <bits/stdc++.h>
using namespace std;
#define int long longlong long mergeAndCount(vector<int>& arr, int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;vector<int> L(n1), R(n2);for (int i = 0; i < n1; ++i)L[i] = arr[left + i];for (int j = 0; j < n2; ++j)R[j] = arr[mid + 1 + j];int i = 0, j = 0, k = left, swaps = 0;while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k++] = L[i++];} else {arr[k++] = R[j++];swaps += (mid + 1) - (left + i);}}while (i < n1) {arr[k++] = L[i++];}while (j < n2) {arr[k++] = R[j++];}return swaps;
}int mergeSortAndCount(vector<int>& arr, int left, int right) {long long count = 0;if (left < right) {int mid = left + (right - left) / 2;count += mergeSortAndCount(arr, left, mid);count += mergeSortAndCount(arr, mid + 1, right);count += mergeAndCount(arr, left, mid, right);}return count;
}signed main() {ios::sync_with_stdio(false); cin.tie(nullptr);int n;cin >> n;vector<int> arr(n);for(int i = 0; i < n; ++i) {cin >> arr[i];}int result = mergeSortAndCount(arr, 0, n - 1);cout << result << endl;return 0;
}

E.求逆序对(deseq)

题面

示例代码

#include <bits/stdc++.h>
using namespace std;
#define int long longlong long mergeAndCount(vector<int>& arr, int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;vector<int> L(n1), R(n2);for (int i = 0; i < n1; ++i)L[i] = arr[left + i];for (int j = 0; j < n2; ++j)R[j] = arr[mid + 1 + j];int i = 0, j = 0, k = left, swaps = 0;while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k++] = L[i++];} else {arr[k++] = R[j++];swaps += (mid + 1) - (left + i);}}while (i < n1) {arr[k++] = L[i++];}while (j < n2) {arr[k++] = R[j++];}return swaps;
}int mergeSortAndCount(vector<int>& arr, int left, int right) {long long count = 0;if (left < right) {int mid = left + (right - left) / 2;count += mergeSortAndCount(arr, left, mid);count += mergeSortAndCount(arr, mid + 1, right);count += mergeAndCount(arr, left, mid, right);}return count;
}signed main() {ios::sync_with_stdio(false); cin.tie(nullptr);int n;cin >> n;vector<int> arr(n);for(int i = 0; i < n; ++i) {cin >> arr[i];}int result = mergeSortAndCount(arr, 0, n - 1);cout << result << endl;return 0;
}

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

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

相关文章

leetcode 4. 两个有序数组的中位数(第k大的数)

假设有前 k 小的数,分配到两个数组中综上, 前k-1数的边界偏离(k-1)/2 时,由于大于(k-1)数边界的挤压会伴随小于k的数的边界的外延, 其在(k-1)/2会呈现一方比另一方大的情况,可以直接判定小的一方在小于k的数的边界内 而当k-1数正好在边界内,则同样可以判定小的数在小于k的…

20241227曹鹏泰 python1

课程:《Python 程序设计》 班级: 2412 姓名: 曹鹏泰 学号: 20241227 实验教师:王志强 实验日期:2025 年 3 月 12 日 必修/选修: 公选课 一、实验内容 熟悉 Python 开发环境; 练习 Python 运行、调试技能(编写书中的程序,并进行调试分析,要有过程); 编写程序…

ospfv3收到adv为全零的5类lsa,该怎么处理?

问题现象:ospfv3建立邻居后发现部分路由丢失原因:抓包查看时发现对端华为设备发送的5类LSA报文中ADV为全0,设备将LSA加到LSDB后,未将其加到边界路由表,导致下发路由中缺失部分路由 临时处理办法:下发边界路由时检查LSDB中是否存在ADV为全0的5类LSA,存在则查找LSDB,得到…

FristiLeaks_1

FristiLeaks_1.3 环境搭建 下载:https://download.vulnhub.com/fristileaks/FristiLeaks_1.3.ova 导入后将mac地址修改为:08:00:27:A5:A6:76信息收集 扫描主机ip ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:84:b2:cc, IPv4: 1…

绿联nas防火墙导致docker网络无法互通

问题描述设备:绿联nas dxp4800 系统:ugnas pro 绿联新系统在12月份更新后,原本用nginx代理的alist,青龙等服务全都连接不上,在ugnas系统防火墙设置如下:对外只通过80端口,其他docker服务都只能通过nginx反代访问,系统更新前一直都没问题。 问题排查 经过反复排查发现关…

20244119 实验一 《Python程序设计》 实验报告

课程:《Python程序设计》 班级: 2441 姓名: 霍彬斌 学号:20244109 实验教师:王志强 必修/选修: 公选课 一、实验内容 熟悉Pycharm等开发环境; 掌握基本的Python运行和调试技能; 掌握基本的Python编程技能。 二、实验过程及结果 1.熟悉Python开发环境; 本次实验使用pyc…

一步一步教你部署ktransformers,大内存单显卡用上Deepseek-R1

环境准备 硬件环境 CPU:intel四代至强及以上,AMD参考同时期产品 内存:800GB以上,内存性能越强越好,建议DDR5起步 显卡:Nvidia显卡,单卡显存至少24GB(用T4-16GB显卡实测会在加载模型过程中爆显存),nvidia compute capability至少8.0(CUDA GPUs - Compute Capability …

20244119实验一《Python程序设计》实验报告

课程:《Python程序设计》 班级: 2441 姓名: 霍彬斌 学号:20244109 实验教师:王志强 必修/选修: 公选课 一、实验内容 熟悉Pycharm等开发环境; 掌握基本的Python运行和调试技能; 掌握基本的Python编程技能。 二、实验过程及结果 1.熟悉Python开发环境; 本次实验使用pyc…

WebSocket系列 注册 @ServerEndpoint类失败

WebSocket系列—注册 @ServerEndpoint类失败 目录WebSocket系列—注册 @ServerEndpoint类失败一、问题背景二、寻找问题三、解决问题3.1、自己定义的切面3.2、外部框架的切面四、参考博客五、WebSocket系列地址 一、问题背景 博主最近分到后端主动推送报警业务,调研了一圈(轮…

实验1 C语言输入输出和简单程序编写补充

任务二:判断它能否构成三角形 #include <stdio.h> int main(){ double a, b, c; scanf_s("%lf%lf%lf", &a, &b, &c); if ((a + b > c) && (a + c > b) && (b + c > a)) printf("能构成三角…

ASE15N45-ASEMI智能家居专用ASE15N45

ASE15N45-ASEMI智能家居专用ASE15N45编辑:ll ASE15N45-ASEMI智能家居专用ASE15N45 型号:ASE15N45 品牌:ASEMI 封装:TO-220 批号:最新 最大漏源电流:15A 漏源击穿电压:450V RDS(ON)Max:0.38Ω 引脚数量:3 沟道类型:N沟道MOS管、中低压MOS管 漏电流:ua 特性:N沟道M…

什么是RabbitMQ入门

一.什么是RabbitMQ 中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必须要有一个通信中间件,即中间件=平台+…