洛谷习题V^V
1.帮贡排序
解题思路:按照题意,排序模拟即可
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;struct Member {string name;string position;int contribution;int level;int original_order;
};int getPriority(const string& pos) {if (pos == "BangZhu") return 0;if (pos == "FuBangZhu") return 1;if (pos == "HuFa") return 2;if (pos == "ZhangLao") return 3;if (pos == "TangZhu") return 4;if (pos == "JingYing") return 5;return 6; // BangZhong
}bool compareDisplay(const Member& a, const Member& b) {int pa = getPriority(a.position);int pb = getPriority(b.position);if (pa != pb) return pa < pb;if (a.level != b.level) return a.level > b.level;return a.original_order < b.original_order;
}bool compareContribution(const Member& a, const Member& b) {if (a.contribution != b.contribution) return a.contribution > b.contribution;return a.original_order < b.original_order;
}int main() {int n;cin >> n;vector<Member> members(n);vector<Member> leaders; vector<Member> others; for (int i = 0; i < n; ++i) {cin >> members[i].name >> members[i].position >> members[i].contribution >> members[i].level;members[i].original_order = i;if (members[i].position == "BangZhu" || members[i].position == "FuBangZhu") {leaders.push_back(members[i]);} else {others.push_back(members[i]);}}sort(others.begin(), others.end(), compareContribution);int huFaCount = 0, zhangLaoCount = 0, tangZhuCount = 0, jingYingCount = 0;for (auto& member : others) {if (huFaCount < 2) {member.position = "HuFa";huFaCount++;} else if (zhangLaoCount < 4) {member.position = "ZhangLao";zhangLaoCount++;} else if (tangZhuCount < 7) {member.position = "TangZhu";tangZhuCount++;} else if (jingYingCount < 25) {member.position = "JingYing";jingYingCount++;} else {member.position = "BangZhong";}}vector<Member> allMembers = leaders;allMembers.insert(allMembers.end(), others.begin(), others.end());sort(allMembers.begin(), allMembers.end(), compareDisplay);for (const auto& member : allMembers) {cout << member.name << " " << member.position << " " << member.level << endl;}return 0;
}
2.阶乘数码
解题思路:高精度,单精度问题,套用模版,最后统计一遍即可
#include<bits/stdc++.h>
#define ll long long
#define endl "\n"using namespace std;
void dis_time() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);
}void mult(vector<int>& ans, int x) {reverse(ans.begin(), ans.end());int up = 0;for (int i = 0; i < ans.size(); i++) {ans[i] = ans[i] * x + up;up = ans[i] / 10;ans[i] %= 10;}while (up) {int cur = up % 10;ans.push_back(cur);up /= 10;}reverse(ans.begin(), ans.end());
}void solve() {int n, m;cin >> n >> m;vector<int>ans;ans.push_back(1);for (int i = 2; i <= n; i++) {mult(ans, i);}int res = 0;for (auto i : ans) {if (i == m)res++;}cout << res << endl;
}int main() {dis_time();int t; cin >> t;while(t--)solve();return 0;
}
3.最大乘积
解题思路:对于一个数学结论,如果可以相同经量分成3的多少次方,但是这里不一样,由
可知,尽可能把数变的小,这样就多,乘积也就最大,即用贪心的思路去解题即可
#include <iostream>
#include <vector>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;const int MAXN = 10003;
const int MAXL = 100003;
const int INF = 2147483647;struct BigNumber {int digits[MAXL]; int length; BigNumber() : length(0) {memset(digits, 0, sizeof(digits));}BigNumber multiply(int num) {BigNumber result;for (int i = 1; i <= length; i++) {result.digits[i] = digits[i] * num;}for (int i = 1; i <= length + 10; i++) {result.digits[i + 1] += result.digits[i] / 10;result.digits[i] %= 10;if (result.digits[i]) {result.length = i;}}return result;}
};int main() {int n;cin >> n;double logValues[MAXN];for (int i = 1; i <= n; i++) {logValues[i] = log(i);}double dp[MAXN];int path[MAXN]; for (int i = 1; i <= n; i++) {dp[i] = -INF;}dp[0] = 0;for (int i = 1; i <= n; i++) {for (int j = n; j >= i; j--) {if (dp[j - i] + logValues[i] > dp[j]) {dp[j] = dp[j - i] + logValues[i];path[j] = j - i;}}}vector<int> decomposition;for (int p = n; p != 0; p = path[p]) {decomposition.push_back(p - path[p]);}sort(decomposition.begin(), decomposition.end());for (int num : decomposition) {cout << num << " ";}cout << endl;BigNumber product;product.length = 1;product.digits[1] = 1;for (int num : decomposition) {product = product.multiply(num);}for (int i = product.length; i >= 1; i--) {cout << product.digits[i];}cout << endl;return 0;
}
4.[NOIP 1998 提高组] 拼数
解题思路:按照ASCII码来排序,排序一下,输出即可
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;string s[21];int n;
bool cmp(const string &a,const string &b) { return (a+b > b+a);
}
int main(void) {cin >> n;for(int i=1;i<=n;++i) cin >> s[i];sort(s+1,s+n+1,cmp);for (int i=1;i<=n;++i) cout << s[i];return 0;
}
5.统计方形(数据加强版)
解题思路:找规律,对于每个格子,假设都为方形的右下角,对于正方形,有这个格子在内的正方形个数为min(x,y),对于这个格子的所有的长方形(包括正方形)为x*y,既如此,遍历每个格子为右下角的情况,相加求解
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int main(){ll n,m,i,j,sum=0,sum1=0;cin>>n>>m;for(i=1;i<=n;i++){for(j=1;j<=m;j++){sum+=min(i,j);sum1+=i*j;}}cout<<sum<<" "<<sum1-sum<<endl;return 0;
}
6.P1618 三连击(升级版)
解题思路:这个就dfs,找全排列在A:B:C的条件下有多少个
#include<bits/stdc++.h>
#define ll long long
#define endl "\n"using namespace std;
void dis_time() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);
}
bool vis[10];
int num[11];
int a, b, c;
int key = 0;
void dfs(int x) {if (x > 9) {int num1 = num[1] * 100 + num[2] * 10 + num[3];int num2 = num[4] * 100 + num[5] * 10 + num[6];int num3 = num[7] * 100 + num[8] * 10 + num[9];if (num1 * b == num2 * a && num1 * c == num3 * a) {key = 1;cout << num1 << " " << num2 << " " << num3 << endl;}return;}for (int i = 1; i <= 9; i++) {if (!vis[i]) {vis[i] = true;num[x] = i;dfs(x + 1);vis[i] = false;}}
}void solve() {cin >> a >> b >> c;dfs(1); if (!key)cout << "No!!!" << endl;
}int main() {dis_time();solve();return 0;
}
6.P3654 First Step (ファーストステップ)
解题思路:对于这个题,可以直接对没列,每行统计就行,但是我最开始写的是dfs,计算出所有的可能然后/2,但是要特判k为1时
#include<bits/stdc++.h>
#define ll long long
#define endl "\n"using namespace std;
void dis_time() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
}
int ans = 0;
char graph[110][110];
int n, m, k;void dfs(int x, int y) {if (x >= k) {int key = 0;for (int i = x; i > x - k; i--) {if (graph[i][y] != '.') {key = 1;break;}}if (!key)ans++;}if (n - x >= k - 1) {int key = 0;for (int i = x; i <= x + k - 1; i++) {if (graph[i][y] != '.') {key = 1;break;}}if (!key)ans++;}if (y >= k) {int key = 0;for (int i = y; i > y - k; i--) {if (graph[x][i] != '.') {key = 1;break;}}if (!key)ans++;}if (m - y >= k - 1) {int key = 0;for (int i = y; i <= y + k - 1; i++) {if (graph[x][i] != '.') {key = 1;break;}}if (!key)ans++;}}void solve() {cin >> n >> m >> k;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> graph[i][j];}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (graph[i][j] == '.' && k != 1)dfs(i, j);}}if (k != 1)cout << ans / 2;elsecout << ans/4;}int main() {dis_time();solve();return 0;
}
6.P1149 [NOIP 2008 提高组] 火柴棒等式
解题思路:就是枚举出每个数字他们所需的火柴个数,然后暴力即可
#include<bits/stdc++.h>
#define ll long long
#define endl "\n"using namespace std;
void dis_time() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
}int num[2500] = { 6,2,5,5,4,5,6,3,7,6 };
void solve() {int n; cin >> n;n -= 4;for (int i = 10; i <= 2000; i++) {int temp = i;while (temp) {num[i] += num[temp % 10];temp /= 10;}}int ans = 0;int t = 0;for (int i = 0; i <= 1000; i++) {for (int j = 0; j <= 1000; j++) {int temp = i + j;if (num[i] + num[j] + num[temp] == n && i != j) {ans ++;}else if (num[i] + num[j] + num[temp] == n && i == j) {ans++; t++;}}}cout << ans - t / 2;}int main() {dis_time();solve();return 0;
}
7.P3799 小 Y 拼木棒
解题思路:对于这个题,有a = b = c + d,只要去找a,c就够了,也就是双层for循环,但是常规的双层for循环会时间超限,所有可以用离散化map来存储,元素和元素个数,然后求解
#include <bits/stdc++.h>
#define ll long long
#define endl "\n"using namespace std;const int MOD = 1e9 + 7;
void dis_time(){ios::sync_with_stdio(false);cin.tie(nullptr);
}void solve() {int n; cin >> n;unordered_map<int, int> freq;int max_len = 0;for (int i = 0; i < n; ++i) {int temp; cin >> temp;freq[temp]++;if (temp > max_len) {max_len = temp;}}ll ans = 0;for (auto& a : freq) {if (a.second < 2) continue;ll cnt_a = (ll)a.second * (a.second - 1) / 2 % MOD;for (auto& c : freq) {int d = a.first - c.first;if (d <= 0 || c.first >= d) continue;if (freq.count(d)) {ll cnt_cd = (ll)c.second * freq[d] % MOD;ans = (ans + cnt_a * cnt_cd % MOD) % MOD;}}if (a.first % 2 == 0) {int c = a.first / 2;if (freq.count(c) && freq[c] >= 2) {ll cnt_c = (ll)freq[c] * (freq[c] - 1) / 2 % MOD;ans = (ans + cnt_a * cnt_c % MOD) % MOD;}}}cout << ans << endl;
}int main() {dis_time();solve();return 0;
}
相关文章:

洛谷习题V^V
1.帮贡排序 解题思路:按照题意,排序模拟即可 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std;struct Member {string name;string position;int contribution;int level;…...

Wireshark 在 macOS 上使用及问题解决
wireshark概述 Wireshark 是被广泛使用的免费开源网络协议分析软件(network protocol analyzer)或网络数据包分析工具,它可以让你在微观层面上查看网络上发生的事情。它的主要功能是截取网络数据包,并尽可能详细地展示网络数据包…...

不同电脑同一个网络ip地址一样吗?如何更改
想象一下,你住在同一栋公寓楼里,所有住户对外共享一个统一的小区地址(类似公网IP),但每家每户又有独立的门牌号(类似内网IP)。网络世界中的IP地址也遵循这一逻辑:同一局域网内的设备…...
Qt使用智能指针
第一步:导入头文件 #include <QScopedPointer> 第二步:创建对象 .h文件 QSharedPointer<Student> m_pClass; .cpp文件 m_pClass.reset(new Student(param1,param2,...,param_n)); 第三步:绑定信号槽 connect(m_pClass.data(), &Class::sign…...

微软 Azure AI Foundry(国际版)十大重要更新
2025 年被广泛视为 “AI 智能体元年”。在过去半年,微软密集发布众多创新技术,构建起从基础设施层、开发工具层到场景应用层的完整技术矩阵,加速推动诸多具备自主决策能力的 “超级助理” 智能体落地,形成完整的 AI 赋能生态&…...
Realsense D435i 使用说明
D435i 驱动安装 及 ROS使用 Ubuntu16.04适配https://blog.csdn.net/lemonxiaoxiao/article/details/107834936 过程中遇到fatal error ; 需要添加标签。 使用下面网址的博客解决了。https://blog.csdn.net/xuzhengzhe/article/details/135407342 最终如下: target…...

PostgreSQL如何更新和删除表数据
这节说下怎样更新和删除表数据,当然认识命令了,可以问AI帮忙写。 接上节先看下天气表weather的数据,增加了杭州和西安的数据: 一.UPDATE更新命令 用UPDATE命令更新现有的行。 假设所有 杭州 5月12日的温度低了两度,用…...
【leetcode】704. 二分查找
二分查找 题目代码 题目 704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,…...

Golang | 运用分布式搜索引擎实现视频搜索业务
把前面所设计好的搜索引擎引用进来开发一个简单的具体的视频搜索业务。代码结构: handler目录:后端接口,负责接收请求并返回结果,不存在具体的搜索逻辑。video_search目录:具体的搜索逻辑存放在这,包括reca…...
针对Helsinki-NLP/opus-mt-zh-en模型进行双向互翻的微调
引言 题目听起来有点怪怪的,但是实际上就是对Helsinki-NLP/opus-mt-en-es模型进行微调。但是这个模型是单向的,只支持中到英的翻译,反之则不行。这样的话,如果要做中英双向互翻就需要两个模型,那模型体积直接大了两倍…...

【笔记】Trae+Andrioid Studio+Kotlin开发安卓WebView应用
文章目录 简介依赖步骤AS(Andriod Studio)创建项目AS创建虚拟机TRAE CN 修改项目新增按键捕获功能 新增WebViewWebView加载本地资源在按键回调中向WebView注入JS代码 最终关键代码吐槽 简介 使用Trae配合Andriod Studio开发一个内嵌WebView的安卓应用, 在WebView中加载本地资源…...
Github 2025-05-30Java开源项目日报Top10
根据Github Trendings的统计,今日(2025-05-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10C++项目1TypeScript项目1Keycloak: 现代应用程序和服务的开源身份和访问管理解决方案 创建周期:3846 天开发语言:Java协议类型:Ap…...

Github上一些使用技巧(缩写、Issue的Highlight)自用
1. GIthub中的一些缩写 LGTM ! 最近经常看到一些迷之缩写,感觉挺有意思的,但是有时候看到一些没见过的缩写还是有点懵逼,不过缩写确实也是很方便去review,这里就记录汇总一下;顺便加了一些git的基操单词(加…...

TextIn OCR Frontend前端开源组件库发布!
为什么开源 TextIn OCR Frontend 前端组件库? 在 TextIn 社群中,我们时常接到用户反馈,调取 API 进行票据等文件批量识别后,需要另行完成前端工程,实现比对环节。为助力用户节省工程成本,TextIn 团队正式开…...
GitLens 教学(学习更新中)
GitLens 是什么? GitLens 是安装在 Visual Studio Code (VS Code) 中的一个功能极其强大的扩展程序,它直接内嵌在您的代码编辑器中,极大地增强了 VS Code 内置的 Git 功能。它的核心目标是: 深刻理解代码历史: 让您轻…...

C#中数据绑定的简单例子
数据绑定允许将控件的属性和数据链接起来——控件属性值发生改变,会导致数据跟着自动改变。 数据绑定还可以是双向的——控件属性值发生改变,会导致数据跟着自动改变;数据发生改变,也会导致控件属性值跟着自动改变。 1、数据绑定…...

VR 技术在农业领域或许是一抹新曙光
在科技日新月异的今天,VR(虚拟现实)技术已不再局限于游戏、影视等娱乐范畴,正逐步渗透到各个传统行业,为其带来全新的发展契机,农业领域便是其中之一。VR 技术利用计算机生成三维虚拟世界,给予用户视觉、听觉、触觉等多…...

【JVM】Java程序运行时数据区
运行时数据区 运行时数据区是Java程序执行过程中管理的内存区域 Java 运行时数据区组成(JVM 内存结构) Java 虚拟机(JVM)的运行时数据区由以下核心部分组成: 线程私有:程序计数器、Java虚拟机栈、本地方…...
NVIDIA英伟达describe-anything软件本地电脑安装部署完整教程
describe-anything是英伟达联合其他大学开发的一款图片视频内容分析总结软件,可通过AI描述任意图片视频选中区域内容,非常强大,下面是describe-anything本地电脑安装部署教程。 首先电脑上安装git https://github.com/git-for-windows/git/…...

计算机视觉入门:OpenCV与YOLO目标检测
计算机视觉入门:OpenCV与YOLO目标检测 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 计算机视觉入门:OpenCV与YOLO目标检测摘要引言技术原理对比1. OpenCV:传统图像处理与机器学…...
Java 中的 ThreadLocal 详解:从基础到源码
Java 中的 ThreadLocal 详解:从基础到源码 引言 在 Java 多线程编程中,ThreadLocal是一个经常被提及的概念。它提供了一种线程局部变量的机制,使得每个线程都可以独立地存储和访问自己的变量副本,而不会与其他线程产生冲突。本文…...
(二)开启深度学习动手之旅:先筑牢预备知识根基
1 数据操作 数据操作是深度学习的基础,包括数据的创建、索引、切片、运算等操作。这些操作是后续复杂模型构建和训练的前提。 入门 :理解如何使用NumPy创建数组,这是深度学习中数据存储的基本形式。掌握数组的属性(如数据类型dt…...
Spring Boot3.4.1 集成redis
Spring Boot3.4.1 集成redis 第一步 引入依赖 <!-- redis 缓存操作 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- pool 对象池 …...

【Prometheus+Grafana实战:搭建监控系统(含告警配置)】
什么是Prometheus和Grafana? Prometheus:一款开源的监控告警工具,擅长时序数据存储和多维度查询(通过PromQL),采用Pull模型主动抓取目标指标。Grafana:数据可视化平台,支持多种数据…...
操作系统原理第9章 磁盘存储器管理 重点内容
目录 (一)外存的组织方式种类 (二)FAT 系统(计算) (三)文件存储空间的管理方式 (一)外存的组织方式种类 连续组织方式 原理:在磁盘等外存上&…...

一文速通Python并行计算:11 Python多进程编程-进程之间的数据安全传输-基于队列和管道
一文速通 Python 并行计算:11 Python 多进程编程-进程之间的数据安全传输-基于队列和管道 摘要: Python 多进程中,Queue 和 Pipe 提供进程间安全通信。Queue 依赖锁和缓冲区,保障数据原子性和有序性;Pipe 实现点对点单…...

LangChain-Tool和Agent结合智谱AI大模型应用实例2
1.Tool(工具) 定义与功能 单一功能模块:Tool是完成特定任务的独立工具,每个工具专注于一项具体的操作,例如:搜索、计算、API调用等 无决策能力:工具本身不决定何时被调用,仅在被触发时执行预设操作 输入输出明确:每个工具需明确定义输入、输出参数及格式 2.Agent(…...
HTML、XML、JSON 是什么?有什么区别?又是做什么的?
在学习前端开发或者理解互联网工作原理的过程中,我们经常会遇到三个非常重要的概念:HTML、XML 和 JSON。它们看起来有点像,但其实干的事情完全不同。 🏁 一、他们是谁?什么时候诞生的? 名称全称诞生时间谁…...
C++中IO文件输入输出知识详解和注意事项
以下内容将从文件流类体系、打开模式、文本与二进制 I/O、随机访问、错误处理、性能优化等方面,详解 C 中文件输入输出的使用要点,并配以示例。 一、文件流类体系 C 标准库提供三种文件流类型,均定义在 <fstream> 中: std…...

centos7.6阿里云镜像各个版本介绍
(水一期) Index of /centos-vault/centos/7.6.1810/isos/x86_64/ File NameFile SizeDateParent directory/--0_README.txt2.4 KB2018-12-01 21:21CentOS-7-x86_64-DVD-1810.iso4.3 GB2018-11-26 07:55CentOS-7-x86_64-DVD-1810.torrent86.0 KB2018-12-…...