洛谷习题V^V

article/2025/7/4 19:42:38

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;
}


http://www.hkcw.cn/article/tRfZJnpZDh.shtml

相关文章

女子称在酒店遗失婚戒 譤方回应:警方已介入调查

5月29日,周女士在深圳蛇口太子湾逸扉酒店住了一晚,不慎将价值6万多元的婚戒遗忘在床头柜上。她于次日在社交平台上发帖求助。据周女士描述,她在28日出差入住该酒店,晚上将婚戒放在床头柜,而她结婚还不满一个月。29日上午9点30分,她去餐厅吃早餐,10点30分退房,直到11点2…

【运维实战】Linux 中设置 sudo ,8个有用的 sudoers 配置!

在Linux及其他类Unix操作系统中&#xff0c;只有 root 用户能够执行所有命令并进行关键系统操作&#xff0c;例如安装更新软件包、删除程序、创建用户与用户组、修改重要系统配置文件等。 但担任 root 角色的系统管理员可通过配置sudo命令&#xff0c;允许普通系统用户执行特定…

Baklib智能推荐赋能内容中台升级

智能推荐重构内容中枢 现代内容中台正经历智能化推荐系统驱动的结构性变革&#xff0c;通过自然语言解析与用户行为建模技术实现信息处理范式的升级。该系统深度融合语义理解引擎&#xff0c;可对知识库中的操作指南、产品文档等非结构化数据进行动态解构&#xff0c;结合多维…

每日算法-250530

每日算法 - 250530 记录一下今天完成的LeetCode算法题目&#xff0c;包含思路、解题过程、复杂度分析和代码实现。 3128. 直角三角形 题目 思路 数组 解题过程 显而易见的是&#xff0c;我们枚举中间的顶点最好计算。当我们的中间顶点是1时&#xff0c;它能够组成的直角三角…

抽奖系统抽奖活动管理流程

抽奖系统大纲&#xff1a; 目录 抽奖系统大纲&#xff1a; 创建抽奖活动&#xff1a; 前端传入&#xff1a; 创建抽奖活动&#xff0c;需要圈选人员&#xff0c;圈选奖品&#xff0c;填写活动必要信息。 Controller层&#xff1a; 接收参数&#xff0c;调用服务层代码&a…

Grace《歌手》第三期第一 格瑞丝夺冠引领风潮

5月30日晚,《歌手2025》第三期播出,共有8名歌手参加比赛。排名如下:格瑞丝金斯勒获得第一名,单依纯位列第二,米奇盖顿排在第三,GAI周延第四,陈楚生第五,马嘉祺第六,白举纲第七。根据节目规则,若袭榜歌手获胜,本场竞演排名最末的在线歌手将暂别舞台。查理普斯作为首位…

郑钦文巴黎街头演唱《日不落》 甜蜜16强庆祝

北京时间5月30日,2025年法网进入第六个比赛日。中国球员郑钦文作为8号种子,以6比3、6比4战胜18岁的加拿大新星姆博科,顺利晋级16强,追平了她在法网的最佳战绩。赛后,郑钦文更新了多条动态,发布了一条微博:“甜蜜16强。”她还分享了一段视频,展示了自己在法国巴黎街头即…

华为OD机试真题——天然蓄水库(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《天然蓄水库》: 目录 题目…

基本数据指针的解读-C++

1、引言 笔者认为对于学习指针要弄清楚如下问题基本可以应付大部分的场景&#xff1a; ① 指针是什么&#xff1f; ② 指针的类型是什么&#xff1f; ③ 指针指向的类型是什么&#xff1f; ④ 指针指向了哪里&#xff1f; 2、如何使用指针 使用时的步骤如下&#xff1a; ① …

日志技术-LogBack、Logback快速入门、Logback配置文件、Logback日志级别

一. 日志技术 1. 程序中的日志&#xff0c;是用来记录应用程序的运行信息、状态信息、错误信息等。 2. JUL&#xff1a;(java.util.logging)这是JavaSE平台提供的官方日志框架&#xff0c;也被称为JUL。配置相对简单&#xff0c;但不够灵活&#xff0c;性能较差。 3.Logs4j&…

Nuxt多环境配置

前言 多环境配置对于特定环境新增、更新、删除配置相当重要&#x1f601;而且不需要人为去变更配置减少出错 实践 方案1&#xff08;官方推荐&#xff09; 升级依赖 升级Nuxt到最新版&#xff08;3.15.x只有开发和生产配置&#xff0c;不支持自定义环境&#xff09; npx n…

林志炫回应机能下降 唱功未减获支持

林志炫参加《歌手2025》,仅两期就被淘汰出局,成为第二位被淘汰的歌手。他在舞台上只唱了两首歌,却因此遭到质疑,很多人认为他的唱功严重下滑。尽管林志炫已年过半百,但他的唱功并未下降。林志炫在参加《我是歌手》期间曾透露,他非常注重嗓子的保养,平时饮食起居都会照顾…

这个中部大省 拼命“抢人” 系统性引才策略

又是一年毕业季。5月28日,长沙市青年人才创新创业政策推介活动在上海复旦大学举行,现场发布了长沙市青年人才创业“双肩包”行动计划,旨在为创业者提供从落地到上市的一条龙支持。这一行动背后是湖南省将大学生创业视为长远发展战略的一部分,通过系统性思维解决人才问题。不…

喜欢红帽子的马斯克 这次戴了黑帽子 DOGE成为“替罪羊”

美东时间5月30日,美国科技亿万富翁埃隆马斯克作为特朗普政府“特殊政府雇员”的任期结束。特朗普为他举行了一场在白宫椭圆形办公室的新闻发布会,并赠送了一把金色钥匙。马斯克戴着一顶印有“DOGE”字样的黑帽子参加了这场欢送会。在负责美国政府效率部(DOGE)运作的130天里…

联合国:全球住房危机影响近30亿人 亟需全球行动应对

当地时间5月29日至30日,第二届联合国人居大会续会在肯尼亚首都内罗毕召开。超过1000名代表参与会议,共同探讨全球住房危机,希望通过讨论、协作与政策规划来解决这一问题。联合国人类住区规划署执行主任阿纳克劳迪娅罗斯巴赫指出,据估计,全球有超过28亿人面临住房条件不达标…

拜登确诊癌症后首公开讲话:感觉很好 称病情发展良好

据美国广播公司和英国广播公司报道,自美国前总统拜登办公室5月18日宣布拜登被诊断患有侵袭性前列腺癌后,拜登于当地时间5月30日首次向记者发表公开讲话。他表示自己感觉很好。拜登说:“预计病情发展良好。我们正努力做好一切工作。一切都在进行中,所以我感觉很好。”他透露…

11月起新生产电池都将有“身份证” 实现全生命周期管控

为加强锂离子电池全生命周期的安全与质量管理,市场监管总局批准发布了《锂离子电池编码规则》国家标准,该标准将于2025年11月1日起实施。新标准赋予每个新生产的电池产品唯一身份编码,适用范围覆盖从单体电池到电池系统的全层级产品。通过“一池一码”可以实现从生产端到回收…

端午假期长江中下游有大暴雨 警惕次生灾害

端午假期期间,中东部地区将经历较大范围的降雨过程。长江中下游等地可能出现强降雨,部分地区甚至会有大暴雨,并伴有强对流天气。需警惕山体滑坡、泥石流等次生灾害。东北地区受冷空气影响将迎来降温,而华南多地则会出现高温,需注意防暑。昨天,中东部新一轮较大范围降雨过…

智慧港口电子通关系统引领智能化监管新时代

在全球贸易蓬勃发展的背景下&#xff0c;港口作为国际贸易的核心枢纽&#xff0c;其通关效率和监管能力直接影响物流链的顺畅运作。智慧港口电子通关系统&#xff08;智能闸口系统&#xff09;通过技术创新与数据融合&#xff0c;为海关监管和港口运营提供高效、精准、智能化的…

使用摄像头推流+VLC软件拉流

一、作用 使用摄像头创建rtsp链接&#xff0c;并使用VLC软件拉流显示。 二、步骤 1、安装FFmpeg库 下载地址&#xff1a;https://ffmpeg.org/download.htmlFFmpeg库的下载参考之前的博客&#xff0c;下载Win64版本即可&#xff1a;https://blog.csdn.net/beijixingcd/artic…