7-1 懂的都懂(raicom睿抗机器人CAIP编程技能赛)

描述了一种利用暴力搜索和哈希表技术检测互联网模糊图片相似性的程序,讨论了如何处理数据转换中的浮点数问题以及优化算法以避免超时。

7-1 懂的都懂

在这里插入图片描述
众所周知,在互联网上有很多话是不好直接说出来的,不过一些模糊的图片仍然能让网友看懂你在说什么。然而对这种言论依然一定要出重拳,所以请你实现一个简单的匹配算法。

现在我们采集了原图的一些特征数据,由 N 个小于 255 的非负整数组成,假设对于给定的若干张由 Mi 个同样小于 255 的非负整数组成的新图的特征数据,每个数据都可以由原图中任意四个不同数据的平均值计算而来,则称新图为原图的相似图片。对于给出的数据,请你判断是不是相似图片。

注意,不同数据指的并非是数据的值不同,而是不能取同一个数据多次。对于两个相同值的数据,如果给出两次,则可以取两次。

输入格式:
输入第一行是两个整数 N,K (1 ≤ N ≤ 50, 1 ≤ K ≤ 200),表示采集的原图的特征数据个数和新图的张数。

接下来一行为 N 个小于 255 的非负整数,表示原图的特征数据。

最后的 K 行,每行第一个数是 Mi (1 ≤ Mi

≤ 200),表示新图的特征数据个数。然后是 Mi 个小于 255 的非负整数,表示新图的特征数据。

输出格式:
对于每一张新图,如果为相似图片,则在一行中输出 Yes,否则输出 No。

输入样例:

5 3
4 8 12 20 40
3 11 16 19
3 12 16 19
10 11 11 11 11 11 11 11 11 11 11

输出样例:

Yes
No
Yes

暴力+哈希表

#include<bits/stdc++.h> // 包含STL库
using namespace std;

// 定义全局变量
int yuan[51]; // 存储原图的特征数据
int ans[1000]; // 用于标记所有可能的特征数据平均值
int
### 机器人开发者大 CAIP 编程技能详情与技术要求 机器人开发者大 CAIP 编程技能是一项面向高校学生的高水平竞,旨在通过编程挑战激发参者的创新能力和实践能力。以下是关于该比的详细信息: #### 比时间 根据相关资料,2024年的机器人开发者大 CAIP 编程技能已经成功举办[^1]。具体比时间通常会在每年年初公布,并且分为区域和全国总决两个阶段。区域一般在春季进行,而全国总决则安排在夏季或秋季。 #### 参规则 - **参对象**:主要面向本科组学生,鼓励团队合作参与。 - **团队组成**:每个参队伍通常由3至5名队员组成,需指定一名队长负责协调工作。 - **报名方式**:通过官方渠道(如 Pintia.cn 平台)完成在线注册并提交相关信息。 - **比形式**:比采用现场编程的形式,选手需要在规定时间内解决一系列复杂的算法问题。 #### 技术要求 比对参者的编程能力提出了较高要求,以下为关键技术点: 1. **算法设计**:熟练掌握基础及高级算法,例如排序、搜索、动态规划等[^1]。 2. **数据结构**:熟悉常用的数据结构,包括但不限于数组、链表、树、图等。 3. **编程语言**:支持多种主流编程语言,如 C++、Python 和 Java 等。以下是一个简单的 C++ 示例代码,展示了如何实现一个基本的二进制枚举逻辑: ```cpp #include <bits/stdc++.h> using namespace std; int n; int arr[5]; vector<int> p; vector<int> vct; int getnum() { int num = 0; for (auto a : p) { num *= 10; num += arr[a]; } return num; } void solve() { cin >> n; for (int i = 1; i <= n; i++) cin >> arr[i]; for (int i = 1; i <= n; i++) p.emplace_back(i); vct.emplace_back(getnum()); while (next_permutation(p.begin(), p.end())) vct.emplace_back(getnum()); int n0 = 1; for (int i = n; i >= 1; i--) n0 *= i; for (int i = 0; i < (1ll << n0); i++) { int cnta = 0, cntb = 0; int suma = 0, sumb = 0; vector<int> vcta; for (int j = 0; j < n0; j++) { if ((i >> j) & 1) cnta++, suma += vct[j] * vct[j], vcta.emplace_back(vct[j]); else cntb++, sumb += vct[j] * vct[j]; } if (cnta == cntb && suma == sumb) { for (auto v : vcta) cout << v << endl; return; } } } ``` 4. **性能优化**:参者需关注程序的时间复杂度和空间复杂度,确保解决方案在限定条件下高效运行。 此外,比还可能涉及实际应用场景中的问题建模与求解,考验选手将理论知识应用于实践的能力[^2]。 #### 其他注意事项 -期间严禁使用任何未经授权的外部资源或工具。 - 所有提交的代码必须原创,不得抄袭他人作品。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命运从未公平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值