当前位置: 首页 > news >正文

第22次CCF计算机软件能力认证

第一题:灰度直方图

解题思路:

哈希表即可

#include<iostream>
#include<cstring>using namespace std;const int N = 610;
int a[N];
int n , m , l;int main()
{memset(a , 0 , sizeof a);cin >> n >> m >> l;for(int i = 0;i < n;i ++)for(int j = 0;j < m;j ++){int x;cin >> x;a[x] ++;}for(int i = 0;i < l;i ++)cout << a[i] << " ";return 0;
}

第二题:邻域均值 

解题思路:

二维前缀和

#include<iostream>
#include<cstring>using namespace std;const int N = 610;
int s[N][N];
int n , l , r , t;int main()
{memset(s , 0 , sizeof s);cin >> n >> l >> r >> t;for(int i = 1;i <= n;i ++)for(int j = 1;j <= n;j ++){int x;cin >> x;s[i][j] = s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] + x;}int res = 0;for(int i = 1;i <= n;i ++)for(int j = 1;j <= n;j ++){int x1 = max(1 , i - r) , y1 = max(1 , j - r);int x2 = min(n , i + r) , y2 = min(n , j + r);int sum = s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1];int cnt = (x2 - x1 + 1) * (y2 - y1 + 1);if(sum <= t * cnt) res ++;}cout << res << endl;return 0;
}

第三题:DHCP服务器

解题思路:

认真读题,题目描述的非常清楚更具题目进行求解即可,

#include<iostream>
#include<algorithm>using namespace std;const int N = 1e5 + 10;int n , tdef , tmax , tmin;
string h; // 本机名称struct IP
{int st; // 0表示未分配、1表示待分配、2表示占用、3表示过期string owner; // 未分配状态没有占用者int t; // 待分配和占用状态拥有一个大于零的过期时刻
}ip[N];int get_ip_d(string c)
{for(int i = 1;i <= n;i ++)if(ip[i].owner == c) return i;return 0;
}int get_ip(int state)
{/*若没有,则选取最小的状态为未分配的 IP 地址若没有,则选取最小的状态为过期的 IP 地址*/for(int i = 1;i <= n;i ++)if(ip[i].st == state) return i;return 0;
}void update(string send)
{/*若不是,则找到占用者为发送主机的所有 IP 地址,对于其中状态为待分配的,将其状态设置为未分配,并清空其占用者,清零其过期时刻,处理结束*/for(int i = 1;i <= n;i ++)if(ip[i].owner == send) {if(ip[i].st == 1){ip[i].st = 0;ip[i].owner = "";ip[i].t = 0;}}
}void change(int tc)
{/*在到达该过期时刻时,若该地址的状态是待分配,则该地址的状态会自动变为未分配,且占用者清空,过期时刻清零;否则该地址的状态会由占用自动变为过期,且过期时刻清零。*/for(int i = 1;i <= n;i ++)if(ip[i].t && ip[i].t <= tc){if (ip[i].st == 1){ip[i].st = 0;ip[i].owner = "";ip[i].t = 0;}else{ip[i].st = 3;ip[i].t = 0;}}
}int main()
{cin >> n >> tdef >> tmax >> tmin >> h;int q;cin >> q;while(q --){// <发送主机> <接收主机> <报文类型> <IP 地址> <过期时刻>string send , get , type;int x , tc , te;cin >> tc >> send >> get >> type >> x >> te;if(get != h && get != "*") {// 判断接收主机是否为本机,或者为 *,若不是,则判断类型是否为 Request,若不是,则不处理;if(type != "REQ") continue; }// 若类型不是 Discover、Request 之一,则不处理if(type != "REQ" && type != "DIS") continue;// 若接收主机为 *,但类型不是 Discover,或接收主机是本机,但类型是 Discover,则不处理。if(get == "*" && type != "DIS" || get == h && type == "DIS") continue;change(tc);// discover 报文if(type == "DIS"){int k = get_ip_d(send);if(!k) k = get_ip(0);if(!k) k = get_ip(3);if(!k) continue;// 将该 IP 地址状态设置为待分配,占用者设置为发送主机ip[k].st = 1 , ip[k].owner = send;// 若报文中过期时刻为 0 ,则设置过期时刻为 t+tdefif(!te) ip[k].t = tc + tdef;else{int w = te - tc;w = min(w , tmax) , w = max(w , tmin);ip[k].t = w + tc;}cout << h << " " << send << " OFR " << k << " " << ip[k].t << endl;}else{if(get != h) {update(send);continue;}if(!(x <= n && x >= 1 && ip[x].owner == send)){cout << h << " " << send << " NAK " << x << " " << 0 << endl;continue;}// 无论该 IP 地址的状态为何,将该 IP 地址的状态设置为占用ip[x].st = 2;if (!te) ip[x].t = tc + tdef;else{int w = te - tc;w = max(w , tmin), w = min(w, tmax);ip[x].t = tc + w;}cout << h << " " << send << " ACK " << x << " " << ip[x].t << endl;}}return 0;
}

第四题:校门外的树

解题思路:

dp问题

设 f[i] 为用了前 i 个障碍点的所有方案

f[i]=(f[0]∗cnt1+f[1]∗cnt2+…+f[j]∗cnt3+…+f[i−1]∗cnt(i−1))

f[i] 在循环的时候已经计算出结果,计算cnt值为重中之重

cnt值,也就是两个位置之间可以整除的结果个数,也就是约数个数。

#include<iostream>
#include<cstring>
#include<unordered_map>
#include<vector>using namespace std;const int N = 1010 , M = 1e5 + 10 , mod = 1e9 + 7;
int n;
int a[N] , f[N];
unordered_map<int , vector<int>>mp;
bool st[M];int main()
{for(int i = 1;i < M;i ++)for(int j = i * 2;j < M;j += i)mp[j].push_back(i); // 枚举因数cin >> n;for(int i = 0;i < n;i ++) cin >> a[i];f[0] = 1;for(int i = 1;i < n;i ++){memset(st , 0 , sizeof st);for(int j = i - 1;j >= 0;j --){int d = a[i] - a[j] , cnt = 0;for(int k : mp[d])if(!st[k]){cnt ++;st[k] = true;}st[d] = true;f[i] = (f[i] + (long long)f[j] * cnt) % mod;}}cout << f[n - 1] << endl;return 0;
}

第五题:疫苗运输

迪杰斯特拉+扩展欧几里得算法(不会)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>#define x first
#define y secondusing namespace std;typedef long long LL;
typedef pair<int, int> PII;const int N = 510;
const LL INF = 0x3f3f3f3f3f3f3f3fll;int n, m;
int len[N];
struct Node
{int cid, sum, pid;
};
vector<Node> ps[N];
vector<PII> line[N];  // x表示节点编号;y表示到下一个点的距离
LL dist[N], ans[N];
int pid[N];
bool st[N];LL exgcd(LL a, LL b, LL &x, LL &y)  // 扩展欧几里得算法, 求x, y,使得ax + by = gcd(a, b)
{if (!b){x = 1; y = 0;return a;}LL d = exgcd(b, a % b, y, x);y -= (a / b) * x;return d;
}void dijkstra()
{memset(dist, 0x3f, sizeof dist);for (int i = 0; i < m; i ++ ){int d = 0;for (int j = 0; j < line[i].size(); j ++ ){if (line[i][j].x == 1){dist[i] = d;pid[i] = j;break;}d += line[i][j].y;}}for (int i = 0; i < m; i ++ ){int t = -1;for (int j = 0; j < m; j ++ )if (!st[j] && (t == -1 || dist[j] < dist[t]))t = j;st[t] = true;auto& l = line[t];auto d = dist[t];for (int j = pid[t], k = 0; k < l.size(); j = (j + 1) % l.size(), k ++ ){for (auto& c: ps[l[j].x]){if (st[c.cid]) continue;  // 优化很重要LL a = d, b = len[t];LL x = c.sum, y = len[c.cid];LL X, Y;LL D = exgcd(b, y, X, Y);if ((x - a) % D) continue;X = (x - a) / D * X;y /= D;X = (X % y + y) % y;if (dist[c.cid] > a + b * X){dist[c.cid] = a + b * X;pid[c.cid] = c.pid;}}d += l[j].y;}}
}int main()
{scanf("%d%d", &n, &m);for (int i = 0; i < m; i ++ ){int cnt, sum = 0;scanf("%d", &cnt);for (int j = 0; j < cnt; j ++ ){int ver, t;scanf("%d%d", &ver, &t);ps[ver].push_back({i, sum, j});line[i].push_back({ver, t});sum += t;}len[i] = sum;}dijkstra();memset(ans, 0x3f, sizeof ans);for (int i = 0; i < m; i ++ ){if (dist[i] == INF) continue;LL d = dist[i];for (int j = pid[i], k = 0; k < line[i].size(); j = (j + 1) % line[i].size(), k ++ ){int ver = line[i][j].x;ans[ver] = min(ans[ver], d);d += line[i][j].y;}}for (int i = 2; i <= n; i ++ )if (ans[i] == INF) puts("inf");else printf("%lld\n", ans[i]);return 0;
}

 

相关文章:

第22次CCF计算机软件能力认证

第一题&#xff1a;灰度直方图 解题思路&#xff1a; 哈希表即可 #include<iostream> #include<cstring>using namespace std;const int N 610; int a[N]; int n , m , l;int main() {memset(a , 0 , sizeof a);cin >> n >> m >> l;for(int …...

Go语言基础之基本数据类型

Go语言中有丰富的数据类型&#xff0c;除了基本的整型、浮点型、布尔型、字符串外&#xff0c;还有数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;等。Go 语言的基本类型和其他语言大同小异。 基本数据类型 整型 整型分为以下两个大类&#xff1a; 按…...

Linux Tracing Technologies

目录 1. Linux Tracing Technologies 1. Linux Tracing Technologies Linux Tracing TechnologieseBPFXDPDPDK...

iOS自定义下拉刷新控件

自定义下拉刷新控件 概述 用了很多的别人的下拉刷新控件&#xff0c;想写一个玩玩&#xff0c;自定义一个在使用的时候也会比较有意思。使应用更加的灵动一些&#xff0c;毕竟谁不喜欢各种动画恰到好处的应用呢。 使用方式如下&#xff1a; tableview.refreshControl XRef…...

Springboot写单元测试

导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintag…...

一篇文章教你使用Docker本地化部署Chatgpt(非api,速度非常快!!!)及裸连GPT的方式(告别镜像GPT)

本地搭建ChatGPT&#xff08;非api调用&#xff09; 第一种方法&#xff1a;使用Docker本地化部署第一步&#xff0c;下载安装Docker登录GPT 第二种方法&#xff1a;不部署项目&#xff0c;直接连接 第一种方法&#xff1a;使用Docker本地化部署 这种方法的好处就是没有登录限…...

前馈神经网络dropout实例

直接看代码。 &#xff08;一&#xff09;手动实现 import torch import torch.nn as nn import numpy as np import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt#下载MNIST手写数据集 mnist_train torchvision.datasets.MN…...

Android DataStore:安全存储和轻松管理数据

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用3.1 Preferences DataStore添加依赖数据读…...

opencv进阶12-EigenFaces 人脸识别

EigenFaces 通常也被称为 特征脸&#xff0c;它使用主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09; 方法将高维的人脸数据处理为低维数据后&#xff08;降维&#xff09;&#xff0c;再进行数据分析和处理&#xff0c;获取识别结果。 基本原理…...

The internal rate of return (IRR)

内部收益率 NPV(Net Present Value)_spencer_tseng的博客-CSDN博客...

半导体自动化专用静电消除器主要由哪些部分组成

半导体自动化专用静电消除器是一种用于消除半导体生产过程中的静电问题的设备。由于半导体制造过程中对静电的敏感性&#xff0c;静电可能会对半导体器件的质量和可靠性产生很大的影响&#xff0c;甚至造成元件损坏。因此&#xff0c;半导体生产中采用专用的静电消除器是非常重…...

【C++入门到精通】C++入门 —— deque(STL)

阅读导航 前言一、deque简介1. 概念2. 特点 二、deque使用1. 基本操作&#xff08;增、删、查、改&#xff09;2. 底层结构 三、deque的缺陷四、 为什么选择deque作为stack和queue的底层默认容器总结温馨提示 前言 文章绑定了VS平台下std::deque的源码&#xff0c;大家可以下载…...

Codeforces Round 893 (Div. 2) D.Trees and Segments

原题链接&#xff1a;Problem - D - Codeforces 题面&#xff1a; 大概意思就是让你在翻转01串不超过k次的情况下&#xff0c;使得a*&#xff08;0的最大连续长度&#xff09;&#xff08;1的最大连续长度&#xff09;最大&#xff08;1<a<n&#xff09;。输出n个数&…...

SpringBoot + Vue 前后端分离项目 微人事(九)

职位管理后端接口设计 在controller包里面新建system包&#xff0c;再在system包里面新建basic包&#xff0c;再在basic包里面创建PositionController类&#xff0c;在定义PositionController类的接口的时候&#xff0c;一定要与数据库的menu中的url地址到一致&#xff0c;不然…...

【业务功能篇71】Cglib的BeanCopier进行Bean对象拷贝

选择Cglib的BeanCopier进行Bean拷贝的理由是&#xff0c; 其性能要比Spring的BeanUtils&#xff0c;Apache的BeanUtils和PropertyUtils要好很多&#xff0c; 尤其是数据量比较大的情况下。 BeanCopier的主要作用是将数据库层面的Entity转化成service层的POJO。BeanCopier其实已…...

让eslint的错误信息显示在项目界面上

1.需求描述 效果如下 让eslint中的错误&#xff0c;显示在项目界面上 2.问题解决 1.安装 vite-plugin-eslint 插件 npm install vite-plugin-eslint --save-dev2.配置插件 // vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import e…...

手摸手带你实现一个开箱即用的Node邮件推送服务

目录 ​编辑 前言 准备工作 邮箱配置 代码实现 服务部署 使用效果 题外话 写在最后 相关代码&#xff1a; 前言 由于邮箱账号和手机号的唯一性&#xff0c;通常实现验证码的校验时比较常用的两种方式是手机短信推送和邮箱推送&#xff0c;此外&#xff0c;邮件推送服…...

【Linux网络】网络编程套接字 -- 基于socket实现一个简单UDP网络程序

认识端口号网络字节序处理字节序函数 htonl、htons、ntohl、ntohs socketsocket编程接口sockaddr结构结尾实现UDP程序的socket接口使用解析socket处理 IP 地址的函数初始化sockaddr_inbindrecvfromsendto 实现一个简单的UDP网络程序封装服务器相关代码封装客户端相关代码实验结…...

Python学习笔记第六十四天(Matplotlib 网格线)

Python学习笔记第六十四天 Matplotlib 网格线普通网格线样式网格线 后记 Matplotlib 网格线 我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线。 grid() 方法语法格式如下&#xff1a; matplotlib.pyplot.grid(bNone, whichmajor, axisboth, )参数说明&#xff1a…...

机器学习与模式识别3(线性回归与逻辑回归)

一、线性回归与逻辑回归简介 线性回归主要功能是拟合数据&#xff0c;常用平方误差函数。 逻辑回归主要功能是区分数据&#xff0c;找到决策边界&#xff0c;常用交叉熵。 二、线性回归与逻辑回归的实现 1.线性回归 利用回归方程对一个或多个特征值和目标值之间的关系进行建模…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...