ACM第三次考核题解
ACM第三次考核题解
| 题目序号 | 难度 | 题目编号 | 题目 | 考察知识点 | 
|---|---|---|---|---|
| 1 | 签到题 | A | 这是一道很难的题!!! | 输出 | 
| 2 | 迷之难度 | F | 神说要有光,于是有了手电筒 | 贪心 | 
| 3 | 简单 | B | This is a real English problem! | 思维 英语 | 
| 4 | 简单 | C | 玩具 | 简单排序 | 
| 5 | 简单 | I | “近义词” | 字符数组 | 
| 6 | 一般 | G | 一起来运动!! | 二分搜索 | 
| 7 | 一般 | E | 这糖保甜吗? | GCD 模拟 | 
| 8 | 一般 | K | 卖教材 | 模拟 | 
| 9 | 一般 | D | 简单切割小游戏 | 结构体运用 | 
| 10 | 一般 | J | 简单截断 | 前缀和 | 
| 11 | 困难 | M | 马学长的小游戏 | 博弈 | 
| 12 | 困难 | H | 分提拉米苏 | 二分答案 | 
| 13 | 困难 | L | 算两次 | 数学 | 
A 这是一道很难的题!!!
print("想看马学长跳舞")
 
F 神说要有光,于是有了手电筒
需要推出一个结论:当最大的电池电量高于其他所有电池电量,则可以把其他电池给消耗完;如果不能,其他电池可以相互搭配, 11 1 1 11地消耗,始终能够把所有的电池电量和 ÷ 2 ÷2 ÷2(向下取整)消耗完,比如样例中 222 2 2 2 222 共 3 3 3个电池,可以用第一个电池和第二个电池消耗 1 1 1的电量,然后再和第三个电池消耗1的电量,最后第二个和第三个一起消耗 1 1 1的电量。
#include <iostream>
using namespace std;
#define ll long long
int main() {ll sum = 0, ans = 0, n = 0, a = 0;cin >> n;for (int i = 0; i < n; i++) {cin >> a;ans = max(a, ans);sum += a;}if (ans > sum / 2) cout << sum - ans;else cout << sum / 2;return 0;
}
 
B This is a real English problem!
题意:对于给定一个质数 n n n,输出一个最小的质数 m m m使得 n + m n+m n+m是合数。
这是一个很简单的题目,可以证明答案不是 2 2 2就是 3 3 3。因为如果是奇数+3之后一定为偶数,一定为合数,但需要考虑 + 2 +2 +2后是不是合数,因为此题找的是最小的 m m m,偶数 + 2 +2 +2仍然为偶数,一定是合数。
#include<bits/stdc++.h>
using namespace std;
int n;
bool check(int x){for(int i = 2 ; i <= n ; i++)if(x%i==0) return true;return false;
}
int main()
{cin >> n;if(check(n+2)) cout << 2;else cout << 3;return 0;
}
 
C 玩具
/*
* 本题思路较为简单就是先排序然后从后往前取最大的那个就可以了
* 如果你觉得的冒泡太麻烦,可以去学一下 C++ 用 C++ 的 algorithm 头文件里的 sort 函数进行排序 
*/
#include <stdio.h>
#define N 1010int a[N];int main()
{int n, sum = 0;scanf("%d", &n);for (long long int i = 1; i <= n; i ++ )scanf("%d", &a[i]);// 对数组进行排序for (int i = 1; i < n; i ++ ) for (int j = 1; j <= n - i; j ++ ) if (a[j] > a[j + 1]) {int temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}// 从后往前取,两个两个取,只把大的那个算入结果内for (long long int j = n; j >= 1; j -- ) {sum += a[j];j --; // 略过下一个}printf("%d\n", sum);return 0;
}
//-------------- 我是一个分割线 -----------------------
/*
* 如果你用 c++ 并使用 algorithm 这个头文件
* 第18行至第24行的排序算法可以替换成下面这行代码 sort(a + 1, a + 1 + n); 
*/  
I “近义词”
看了题目大家应该都知道是直接遍历比较就可以,最主要的是怎么存多个字母,因为比较的字符串是在最后给出,这里提供四个思路:
1.用二维字符数组
2.用一维字符数组(但计算位置时需要退一下坐标)
3.用c++的vector容器
4.用c++的string数组
下面给出两种解法1和3的代码
#include <stdio.h>
int main()
{int n,m;int num=0;int tem=0;char a[1100][1100];scanf("%d%d",&n,&m);for(int i=0;i<=n;i++){scanf("%s",a[i]);}for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(a[i][j]!=a[n][j])tem++;if(tem>2)break;}if(tem<=2)num++;tem=0;}printf("%d",num);return 0;
}
 
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
int n,m;
vector<string> v;
string s;
int ans;
int main()
{cin >> n >> m ;for(int i = 1 ; i <= n ; i ++){string s;cin >> s;v.push_back(s);}cin >> s;for(int i = 0 ; i < v.size() ; i ++){int t = 0;string ss = v[i];for(int i = 0 ; i < ss.size() ; i++){if(ss[i] != s[i]) t++;}if( t <= 2) ans ++;//cout << t << endl;}cout << ans;
}
 
G 一起来运动!!
这题本意是靠二分,但由于出题人疏忽,数据没有捏好,让你们 O ( n 3 ) O(n^3) O(n3)给过了,气死了!!!

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 1100;
int a[N];
int n;int main() {cin >> n;for(int i = 0; i < n; i ++) cin >> a[i];sort(a, a + n);int ans = 0;for(int i = 0; i < n; i ++) {for(int j = i + 1; j < n; j ++) {int l = lower_bound(a , a + n, 2 * a[j] - a[i]) - a;int r = upper_bound(a , a + n, 3 * a[j] - 2 * a[i]) - a;ans += r - l;}}cout << ans << endl;return 0;
}
 
E 这糖保甜吗?
#include<stdio.h>
#include<math.h>int GCD(int m, int n)
{int tmp;m = abs(m);n = abs(n);// 保证后续m%n为较大数除以较小数if (m<n){tmp = m;m = n;n = tmp;}// 辗转相除的过程,终止条件是余数为0while (m % n != 0){tmp = m;m = n;n = tmp % n;}// 返回除数(较小数)return n;
}int main() {int a, b, c, d;int gcd; // 最大公约数int den, num; // 分子num 分母denint op; // 操作数scanf("%d",&op);scanf("%d %d %d %d",&a,&b,&c,&d);gcd = GCD(b, d);// 以下是分数运算过程// 通分——分母最大den = b * d / gcd;// den/b 为分母扩大了多少倍 分子也要相应扩大倍数if (op == 1)num = a * (den / b) + c * (den / d);	elsenum = a * (den / b) - c * (den / d);// 以下是分数化到最简过程// 避免输出0/nif (num == 0) {printf("0\n");} else if (num == den) {printf("1\n");}else {gcd = GCD(num, den); num = num / gcd;den = den / gcd;printf("%d/%d",num,den);}return 0;
}
 
K 卖教材
根据题意模拟即可,但需要注意的是当给20元找零的时候需要先使用 5 + 10 5+10 5+10,如果没有再考虑 5 + 5 + 5 5+5+5 5+5+5
#include <bits/stdc++.h>
using namespace std;
int num5,num10,num20;
int ans=0;
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);if(x==5) {num5++;ans++;}else if(x==10){if(num5>0){num5--;num10++;ans++;}else {break;}}else {if(num5>0&&num10>0){num5--;num10--;num20++;ans++;}else if(num5>=3){num5-=3;num20++;ans++;}else {break;}}}printf("%d",ans*5);return 0;
}
 
D 简单切割小游戏
使用结构体存每一段,排序之后贪心地从最后一个位置切割(这也是怎么排序的依据)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5+5;
struct node{int a, b;
}s[N];
bool cmp(node x, node y){if(x.b == y.b){return x.a < y.a;}return x.b < y.b;
}
void solve()
{int n, m;scanf("%d%d",&n,&m);for(int i = 0;i < m;i++){scanf("%d%d",&s[i].a,&s[i].b);if(s[i].a > s[i].b)swap(s[i].a,s[i].b);}sort(s,s+m,cmp);int flag = 0, ans = 0;for(int i = 0;i < m;i++){if(flag <= s[i].a){flag = s[i].b;ans++;}}printf("%d",ans);
}
int main()
{solve();return 0;
}
 
J 简单截断
巧妙地运用了前缀和,第一个切割点一定在所有数和的 1 3 \frac{1}{3} 31处,而第二个切割点一定在所有数和的 2 3 \frac{2}{3} 32处
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int sum[N];
int n;
int main(){cin >> n;for(int i = 1 ; i <= n ; i++){int x;cin >> x;sum[i] = sum[i-1] + x;}if(sum[n]%3!=0){cout << 0;return 0;}long long cnt = 0,ans = 0;for(int i = 1 ; i <= n - 2; i ++){if(sum[i] == sum[n]/3) cnt ++;if(sum[i+1] == sum[n]/3*2) ans += cnt;}cout << ans;return 0;
}
 
M 马学长的小游戏
#include <iostream>
using namespace std;
int main()
{int n = 1;while(1) {cin >> n; if (n == 0) break;if (n % 2 == 1) printf("maxuezhang win\n");else printf("xiaoJtongxue win\n");}return 0;
}
 
H 分提拉米苏
#include <bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;
int l[N], r[N];
int n, k;
bool check(int mid){int res = 0;for(int i = 0 ; i < n ; i ++){res += (l[i]/mid)*(r[i]/mid);if(res >= k) return true;}return false;
}
int main()
{cin >> n >> k;for(int i = 0 ; i < n ; i ++) cin >> l[i] >> r[i];int l = 1 , r = 10000;while(l < r){int mid = (l + r + 1) / 2;if(check(mid)) l = mid;else r = mid - 1;}cout << l << endl;return 0;
}
 
L 算两次
#include <bits/stdc++.h>
#define ll long long
#define N 100005
int f[N],p[N],nu1[N],nu2[N];
int num1=0,num2=0;
int ma=0;
using namespace std;
int num=0;
void init_p()
{f[1]=1;num=0;for(int i=2;i<=N;i++){if(f[N]==0){p[++num]=i;}for(int j=1;j<=num;j++){if(i*p[j]<N) f[i*p[j]]=1;if(i%p[j]==0||i*p[j]>N) break;}}
}
int main()
{init_p();int m;scanf("%d",&m);for(int i=1;i<=m;i++){int op,x;scanf("%d%d",&op,&x);if(x<0){num1++;x=-1*x;}ma=max(ma,x);if(op==1){for(int i=1;p[i]<=x;i++){if(f[x]==0){nu1[x]++;break;}while(1){if(x%p[i]==0){nu1[p[i]]++;x/=p[i];}else break;}}}else {for(int i=1;p[i]<=x;i++){if(f[x]==0){nu1[x]--;break;}while(1){if(x%p[i]==0){nu1[p[i]]--;x/=p[i];}else break;}}}}scanf("%d",&m);for(int i=1;i<=m;i++){int op,x;scanf("%d%d",&op,&x);if(x<0){num2++;x=-1*x;}ma=max(ma,x);if(op==1){for(int i=1;p[i]<=x;i++){if(f[x]==0){nu2[x]++;break;}while(1){if(x%p[i]==0){nu2[p[i]]++;x/=p[i];}else break;}}}else {for(int i=1;p[i]<=x;i++){if(f[x]==0){nu2[x]--;break;}while(1){if(x%p[i]==0){nu2[p[i]]--;x/=p[i];}else break;}}}}if(num1%2!=num2%2){printf("NO");return 0;}for(int i=1;p[i]<=ma;i++){if(nu1[p[i]]!=nu2[p[i]]){printf("NO");return 0;}}printf("YES");return 0;
}
相关文章:
ACM第三次考核题解
ACM第三次考核题解 题目序号难度题目编号题目考察知识点1签到题A这是一道很难的题!!!输出2迷之难度F神说要有光,于是有了手电筒贪心3简单BThis is a real English problem!思维 英语4简单C玩具简单排序5简单I“近义词…...
基于Vue3内置的lodash函数库实现防抖节流
前言 防抖节流是可以说是一种优化组件性能的技巧,可以有效减少组件中的渲染次数和计算量,从而提高组件的响应速度和用户体验。在Vue3中可以使用lodash库中的debounce和throttle函数来分别实现防抖和节流。当然也可以自行设计实现防抖节流函数࿰…...
ls -a有什么作用
ls -a 是一个在类Unix操作系统(如Linux、macOS)中使用的命令,用于列出目录中的所有文件和目录,包括那些以.开头的隐藏文件。 具体作用如下: ls: 这是一个列出目录内容的命令。 -a: 这是一个选项,表示"…...
LLM - 使用 RAG (检索增强生成) 多路召回 实现 精准知识问答 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142629289 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 RAG (R…...
编程语言图书创作要注意的事情有哪些?
编程语言图书的创作是一项复杂且具有挑战性的任务,需要作者深入理解技术、清晰表达,并考虑读者的学习体验。一本优秀的编程书籍不仅能够教授技术知识,更能引导读者逐步深入,激发他们的思考和实际应用能力。以下将详细探讨编程语言…...
主流高级编程语言的推出时间及年份
1.下表一些主流高级编程语言的推出时间及年份: 高级语言 推出时间 岁数 FORTRAN 1957 67 LISP 1959 65 COBOL 1961 63 BASIC 1964 60 Pascal 1970 54 C 1972 52 MATLAB 1978 46 SQL 1978 46 Objective-C 1983 41 C 1983 41 Perl …...
qt 模仿简易的软狗实现
我们在写软件的时候,希望我们的软件只在固定的机器上运行,其他机器上运行不了,那我们应该如何做呢? 1 首先我们需要得到运行机器的mac地址,这样可以简易的判断是否是我们授权的机器。 那我们首先定义一个授权mac机器…...
荣业食品销售费用每年上亿元:主要产品收入大降,电商占比过低
《港湾商业观察》黄懿 今年3月,广东荣业食品有限公司的控股公司Wing Yip Food Holdings Group Limited(下称“荣业食品”)向美国SEC递交了纳斯达克上市申请。 据悉,2023年11月,商务部宣布移除了一批共计55家因长期经…...
数据结构:并查集
数据结构:并查集 并查集原理实现框架初始化合并查询获取成员路径压缩其它 总代码 并查集 在生活中,经常会出现分组问题。比如一个班级分为多个小组,打篮球分为两方等等。在同一个组中的所有成员,就构成一个集合。对这种一个群体分…...
微信小程序实战教程:轻松实现列表批量选择功能
在许多场景下,用户需要对列表中的多项内容进行操作,如批量删除、批量下载等。为了满足这一需求,我们需要在微信小程序中实现列表批量选择功能。具体要求如下: 用户可以逐个选择列表项,也可通过全选按钮快速选择所有列表…...
企业微信:开启客户联系和配置
前言 客户联系是企业微信的一项非常实用且自定义化配置丰富的功能,使企业内的授权员工可以添加外部客户(企业微信联系人和微信联系人)进行工作沟通,并且还可以建立客户群,甚至发表内容到客户朋友圈! 由于功…...
Python发送邮件教程:如何实现自动化发信?
Python发送邮件有哪些方法?如何利用python发送邮件? 无论是工作汇报、客户通知还是个人提醒,邮件都能快速传递信息。Python发送邮件的自动化功能就显得尤为重要。AokSend将详细介绍如何使用Python发送邮件,实现自动化发信&#x…...
一周热门|苏姿丰:芯片行业不能只盯着 GPU;Gartner:GenAI 即将越过期望膨胀期
大模型周报将从【企业动态】【技术前瞻】【政策法规】【专家观点】四部分,带你快速跟进大模型行业热门动态。 01 企业动态 Open AI 计划从非营利组织向营利组织转型 日前,路透社报道称,OpenAI 正在制定一项计划,将其核心业务重…...
Failed to load WebView provider: No WebView installed
1、问题 使用webview加载网页,在应用运行时,报了如下错误:android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed2、分析 通过查看项目的修改记录,确实安装了We…...
java日志框架之Log4j
文章目录 一、Log4j简介二、Log4j组件介绍1、Loggers (日志记录器)2、Appenders(输出控制器)3、Layout(日志格式化器) 三、Log4j快速入门四、Log4j自定义配置文件输出日志1、输出到控制台2、输出到文件3、输出到数据库 五、Log4j自…...
C++ bitset(位图)的模拟实现
文章目录 一、bitset接口总览二、bitset模拟实现1. 构造函数2. set、reset、flip、test3. size、count4. any、none、all5. 打印函数 三、完整代码 一、bitset接口总览 成员函数功能set设置指定位或所有位为1(即设置为“已设置”状态)reset清空指定位或…...
Llama 3.2:利用开放、可定制的模型实现边缘人工智能和视觉革命
在我们发布 Llama 3.1 模型群后的两个月内,包括 405B - 第一个开放的前沿级人工智能模型在内,它们所产生的影响令我们兴奋不已。 虽然这些模型非常强大,但我们也认识到,使用它们进行构建需要大量的计算资源和专业知识。 我们也听到…...
解决R语言bug ‘sh‘ is not recognized as an internal or external command
安装源码包‘httr2’ trying URL ‘https://cran.rstudio.com/src/contrib/httr2_1.0.5.tar.gz’ Content type ‘application/x-gzip’ length 230632 bytes (225 KB) downloaded 225 KB installing source package ‘httr2’ … ** package ‘httr2’ successfully unpacked…...
记一次Mac 匪夷所思终端常用网络命令恢复记录
一天莫名奇妙发现ping dig 等基础命令都无法正常使用。还好能浏览器能正常访问,,,, 赶紧拿baidu试试^-^ ; <<>> DiG 9.10.6 <<>> baidu.com ;; global options: cmd ;; connection timed out; no serve…...
2024最新!!Java后端面试题(4)看这一篇就够了!!!!
七、异常 throw 和 throws 的区别? throw用来显式地抛出一个异常,而throws则用于在方法声明中指明该方法可能抛出的异常。简单来说,throw是抛出异常的实际动作,throws是告知调用者这个方法可能会抛出哪些异常的声明。 final、f…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
