SMU Summer 2024 Contest Round 4

SMU Summer 2024 Contest Round 4

2024.7.16 9:00————11:00

过题数3/7
补题数6/7

  • Made Up
  • H and V
  • Moving Piece
  • Sum of Divisors
  • Red and Green Apples
  • Rem of Sum is Num
  • Keep Connect

A - Made Up

题解:
给定三个数组a,b,c,各自包含n个数字,求有多少组的
a[i]=b[c[j]]
因为给定的数组中数字大小范围是从1到n,将b中数组重新赋值一次后,相同的数字个数相乘即可。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long longsigned main() {int n;cin >> n;int a[100005],b[100005],c[100005];int bb[100005];int aa[100005];for (int i = 1; i <= n; i++) {aa[i] = 0;bb[i] = 0;}for (int i = 1; i <= n; i++) {cin >> a[i];aa[a[i]]++;}for (int i = 1; i <= n; i++) {cin >> b[i];}for (int i = 1; i <= n; i++) {cin >> c[i];bb[b[c[i]]]++;}int sum = 0;for (int i = 1; i <= n; i++) {sum+=(bb[i] * aa[i]);}cout << sum;return 0;
}

B - H and V

当时写了个巨长的二进制枚举,四重循环中间套循环套字符数组,后来去看了看别人写的,还挺简洁的。
题解:
h行w列,白色是’.',黑色是‘#’,每次可选取任意行或列的方块变成红色,要求最后剩下k个黑块有多少种方案。
数据给的比较小,六以内,直接二进制枚举遍历,不过要注意方法,不然真的非常费时。
代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int h,w,k;
char ys[10][10];
int a[10][10];signed main() {cin >> h >> w >> k;for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {cin >> ys[i][j];}}int ans = 0;for (int i = 0; i <= (1 << h)-1; i++) {for (int a = 0; a <= (1 << w)-1; a++) {int res = 0;for (int j = 0; j < h; j++) {for (int b = 0; b < w; b++) {if((a>>b&1) && ((i>>j&1)) && ys[j][b] == '#') {res++;}}}if(res == k)ans++;}}cout << ans;return 0;
}
//虽然过了但是巨长巨乱的代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int h,w,k;
char ys[10][10];
int a[10][10];signed main() {cin >> h >> w >> k;for (int i = 1; i <= h; i++) {for (int j = 1; j <= w; j++) {cin >> ys[i][j];}}int ans = 0;for (int i = 0; i <= (1 << h)-1; i++) {char c[10][10];for (int f = 1; f <= h; f++) {for (int s = 1; s <= w; s++) {c[f][s] = ys[f][s];}}for (int j = 0; j < h; j++) {if(i >> j & 1) {for (int p = 1; p <= w; p++) {c[j+1][p] = '!';}}}for (int a = 0; a <= (1 << w)-1; a++) {char cc[h][w];for (int f = 1; f <= h; f++) {for (int s = 1; s <= w; s++) {cc[f][s] = c[f][s];}}for (int b = 0; b < w; b++) {if(a >> b & 1) {for (int q = 1; q <= h; q++) {cc[q][b+1] = '!';}}}int res = 0;for (int l = 1; l <= h; l++) {for (int r = 1; r <= w; r++) {if(cc[l][r] == '#')res++;}}if(res == k)ans++;}}cout << ans;return 0;
}

C - Moving Piece

这题挺…怎么说呢
题解:
英文题面,可以移动1到k内任意步数,每次移动必须到第p[i]位置,并会获得c[p[i]]价值,最多可以获得多少价值。
思路比较清晰,用到前缀和思想,找出最大值,如果陷入循环,因为K比较大,可以直接相乘得出。
有八个样例点考察在当K比较大时,最后一组循环也应该要找到最大的一个位置停住,而不是一直找下去找完这个循环,见注释。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
int n,k;
int p[5005];
int c[5005];
int res[5005];
int st[5005];signed main() {cin >> n >> k;for (int i = 1; i <= n; i++) cin >> p[i];for (int i = 1; i <= n; i++) cin >> c[i];int ma = -1e10;//注意c数组的范围for (int i = 1; i <= n; i++) {res[i] = -1e10;int j = i;int t = 0;int sum = 0;memset(st,0,sizeof st);//memset只可全部赋值为-1或0while (1) {//除非遇到中止循环的情况j = p[j];if(st[j] == 1) {//这个已经走过了,说明开始循环int z = p[i];int lsum = 0;int lt = 0;while (z != j) {sum -= c[z];lsum += c[z];z = p[z];t--;lt++;}//这一大串都是在判断循环的部分,因为前面俩三个可能没进入循环,但是!这个判断是没有样例点的呵呵int lr = res[i];k = k-lt;int ls = k/t;if(k % t == 0)ls--;//留出最后一次循环res[i] =ls*sum + lsum;int laa = -1e10;int aaa = 0;for (int s = 1; s <= (k%t ? k % t: t); s++){j = p[j];aaa += c[j];laa = max(laa,aaa);//就是这一段,有八个样例点,最后一次循环不用非走到最后一步}res[i] = res[i] + laa;res[i] = max(res[i],lr);//sum是负数的情况,多次循环会越来越小break;}sum+=c[j];st[j] = 1;t++;if(res[i] < sum) res[i] = sum;//其实是前缀和思想,sum不一定越来越大但我只要最大的那一个if(t == k) break;//步数走完且未循环}ma = max(ma,res[i]);}cout << ma;return 0;
}

D - Sum of Divisors

代码简单难在思考难度
题解:
求k从1到n的(k*k的因数的和)的和。
n范围最大到10的7次方,直接暴力会爆。所以考虑1到n会是谁的因数,然后这些数字相加即可,最后全部相加。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long signed main() {int n;cin >> n;int ans = 0;for (int i = 1; i <= n; i++) {int res = n/i;int ls = res*i;ans += (i+ls)*res/2;//首项+尾项  *  项   /  2; }cout << ans << endl;return 0;
}

E - Red and Green Apples

题解:
你需要x个红苹果和y个绿苹果,有c个可以染色的苹果。你需要尽可能拿到最大重量和。
将最大的x个红苹果和最大的y个绿苹果都输入multiset,在给进去x+y(如果有的话)个可染色苹果,然后排序输出最大的x+y个和即可。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
int x,y,a,b,c;
int p[100005];
int q[100005];
int r[100005];signed main() {cin >> x >> y >> a >> b >> c;for (int i = 1; i <= a; i++)cin >> p[i];for (int i = 1; i <= b; i++)cin >> q[i];for (int i = 1; i <= c; i++)cin >> r[i];sort(r+1,r+c+1,greater<>());sort(p+1,p+a+1,greater<>());sort(q+1,q+b+1,greater<>());multiset<int>re;re.clear();for (int i = 1; i <= x; i++) {re.insert(p[i]);}for (int i = 1; i <= y; i++)re.insert(q[i]);for (int i = 1; i <= min(x+y,c); i++)re.insert(r[i]);//万一不够也得全部输入int ans = 0;int js = 0;for (auto aaa : re) {js++;if(js > re.size()-x-y) {ans += aaa;}//哎呀实在写不出递减set当时,只能这么输出了}cout << ans;return 0;
}

F - Rem of Sum is Num

题解:
前缀同余
代码:


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

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

相关文章

MySQL日期和时间相关函数

目录 1. 获取当前时间和日期 2. 获取当前日期 3. 获取当前时间 4. 获取单独的年/月/日/时/分/秒 5. 添加时间间隔 date_add ( ) 6. 格式化日期 date_format ( ) 7. 字符串转日期 str_to_date () 8. 第几天 dayofxx 9. 当月最后一天 last_day ( ) 10. 日期差 datedif…

H. Beppa and SwerChat【双指针】

思路分析&#xff1a;运用双指针从后往前扫一遍&#xff0c;两次分别记作数组a&#xff0c;b&#xff0c;分别使用双指针i和j来扫&#xff0c;如果一样就往前&#xff0c;如果不一样&#xff0c;i–,ans #include<iostream> #include<cstring> #include<string…

SQL server 练习题2

课后作业 作业 1&#xff1a;自己查找方法&#xff0c;将 homework_1.xls 文件数据导入到 SQLServer 的 homework 数据库中。数据导入完成后&#xff0c;把表名统一改为&#xff1a;外卖表 如下所示&#xff1a; 作业 2&#xff1a;找出所有在 2020 年 5 月 1 日至 5 月 31 …

Zookeeper之CAP理论及分布式一致性算法

CAP理论 CAP理论告诉我们&#xff0c;一个分布式系统不可能同时满足以下三种 一致性&#xff08;C:consistency&#xff09;可用性&#xff08;A:Available&#xff09;分区容错性&#xff08;P:Partition Tolerance&#xff09; 这三个基本要求&#xff0c;最多只能同时满足…

python 语法学习 day2

python有七大数据类型, 数据类型转换, 多变量赋值与print间隔, split函数, int用法总结python有七大数据类型&#xff1a; &#xff08;1&#xff09;数字&#xff08;Number&#xff09;&#xff1a;int(整型&#xff0c;长整型)&#xff0c;float(浮点型)&#xff0c;com…

部署k8s 1.28.9版本

继上篇通过vagrant与virtualBox实现虚拟机的安装。笔者已经将原有的vmware版本的虚拟机卸载掉了。这个场景下&#xff0c;需要重新安装k8s 相关组件。由于之前写的一篇文章本身也没有截图。只有命令。所以趁着现在。写一篇&#xff0c;完整版带截图的步骤。现在行业这么卷。离…

SpringBoot中常用的注解及其用法

1. 常用类注解 RestController和Controller是Spring中用于定义控制器的两个类注解. 1.1 RestController RestController是一个组合类注解,是Controller和ResponseBody两个注解的组合,在使 用 RestController 注解标记的类中&#xff0c;每个方法的返回值都会以 JSON 或 XML…

【Android安全】Ubuntu 下载、编译 、刷入Android-8.1.0_r1

0. 环境准备 Ubuntu 16.04 LTS&#xff08;预留至少95GB磁盘空间&#xff0c;实测占94.2GB&#xff09; Pixel 2 XL 要买欧版的&#xff0c;不要美版的。 欧版能解锁BootLoader、能刷机。 美版IMEI里一般带“v”或者"version"&#xff0c;这样不能解锁BootLoader、…

网络安全-网络安全及其防护措施2

6.安全设计和日志 安全审计 安全审计是对系统和网络活动进行检查和记录的过程&#xff0c;确保合规性和安全性。审计过程可以帮助发现潜在的安全漏洞和违规行为&#xff0c;并验证系统配置和操作的正确性。 定期审计 定义&#xff1a;定期检查系统和网络的安全配置和活动记录…

394. 字符串解码 739. 每日温度(LeetCode热题100)

394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; curr_str&#xff1a;遍历整个字符串时 如果左边有[&#xff0c;且无相应右括号和其匹配&#xff0c;那么curr_str就表示该[到当前位置的解码字符串如果左边的[]已经匹配&#xff0c;或者没有[]&#xff0c;curr_siz…

找不到vcruntime140_1.dll 无法执行的相关解决方法,如何高效率修复vcruntime140_1.dll

当出现“找不到 vcruntime140_1.dll 无法执行”这类提示时&#xff0c;意味着你的系统中的 vcruntime140_1.dll 文件已经缺失或者损坏。为了恢复并正常启动你的程序&#xff0c;你需要对这个 DLL 文件进行修复。接下来&#xff0c;我们将详细介绍如何进行这一操作。 一.找不到v…

数学建模·层次分析法

层次分析法 LAF 定义 评价体系的优劣影响&#xff0c;计算评价指标的权重的一种方法 主观性较强&#xff0c;现在一般不用 主要步骤 关键在于一致性检验和求权值 权重的计算 注意权重之和为1&#xff0c;需要归一化 算数平均法 特征值法 矩阵的一致性检验 为什么要检验…

【C语言】原码、反码、补码详解 -《码上有道 ! 》

目录 原码、反码、补码详解及其在C语言中的应用一、原码&#xff08;Sign-Magnitude&#xff09;1.1 定义与表示1.2 历史来源与作用1.3 示例1.4 C语言示例1.5 代码运行结果 二、反码&#xff08;Ones Complement&#xff09;2.1 定义与表示2.2 历史来源与作用2.3 示例2.4 C语言…

sentinel网关限流配置及使用

sentinel控制台源码&#xff1a;https://download.csdn.net/download/yixin605691235/89543923 sentinel控制台jar包&#xff1a;https://download.csdn.net/download/yixin605691235/89543931 不同环境直接修改jar包中的application.yml文件中的nacos地址就可以了。 一、网关限…

【LeetCode 0169】【摩尔投票算法】主元素

Majority Element Given an array nums of size n, return the majority element. The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array. Example 1: **Input:** nums [3…

大数据信用查询有哪些问题值得注意呢?

随着大数据技术的不断发展&#xff0c;大数据信用报告成为一种新型的信用风险检测工具&#xff0c;被很多的银行和机构广泛用于信用风险评估&#xff0c;那大数据信用查询有哪些问题值得注意呢?本文就带大家一起去了解一下&#xff0c;希望对你有一定的帮助。 大数据信用查询这…

JsonCPP源码分析——分配器和配置器

1、allocator.h文件 该文件定义了一个分配器模版&#xff0c;该文件主要使用了内存对齐控制、rebind机制(C 标准库的分配器接口要求提供 rebind 机制&#xff0c;以支持不同类型的分配)、::operator new、std::addressof等技术。 内存对齐控制&#xff1a;之所以先保存当前内存…

《C++ 入门:第一个小程序》

《C 入门&#xff1a;第一个小程序》 在学习 C 的旅程中&#xff0c;编写第一个小程序是一个令人兴奋的时刻。它就像打开一扇通往新编程世界的大门&#xff0c;让我们初步领略 C 的魅力。 C 是一种强大而灵活的编程语言&#xff0c;广泛应用于各种领域&#xff0c;从系统编程…

python 方向梯度直方图(HOG)算法 【附两种实现方法并可视化】

目录 一、概述1.1 算法定义1.2 实现过程二、方法1(skimage库)2.1 代码实现2.2 结果示例三、方法2(cv2库)3.1 代码实现3.2 结果示例四、结果对比🙋 结果预览 一、概述 1.1 算法定义 方向梯度直方图(Histogram of Oriented Gradient,HOG):是应用在计算机视觉和图像处…

Telegram Bot、小程序开发(三)Mini Apps小程序

文章目录 一、Telegram Mini Apps小程序二、小程序启动方式三、小程序开发小程序调试模式初始化小程序Keyboard Button Mini Apps 键盘按钮小程序【依赖具体用户信息场景,推荐】**Inline Button Mini Apps内联按钮小程序**initData 的自动传递使用内联菜单时候哪些参数会默认传…