CCF CSP (2020.06_1_线性分类器_C++)(暴力破解)

devtools/2025/2/27 5:22:45/

CCF CSP 2020.06_1_线性分类器_C++

    • 题目描述:
      • 解题思路:
        • 思路一(暴力破解法):
      • 代码实现
        • 代码实现(暴力破解法):

题目描述:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路:

思路一(暴力破解法):

1、解此类题目分为两部分:
①读入数据(n+m+1):
      (1)输入n m(点、查询个数)
      (n)输入n行 xi,yi,typei
      (m)输入m行 a1,a2,a3

② 处理数据,解决问题
      A分类:计算 a0+a1x+a2y 判断其是否大于0,记录在bool数组 A 中。
      B分类:计算 a0+a1x+a2y 判断其是否大于0,记录在bool数组 B 中。
同一分类中,如果 a0+a1x+a2y 都为 true 或 false ,并且 不同分类中 分别存储false和true,则输出 YES,否则输出 NO。

代码实现

代码实现(暴力破解法):
#include <iostream>
#include <vector>
using namespace std;int main(int argc, char const *argv[]) {// 读取n(点的数量)和m(查询的数量)int n, m;cin >> n >> m;// 定义数组 x, y, type 用来存储每个点的坐标和类别int x[n], y[n];char type[n];// 读取n个点的坐标和类别for (int i = 0; i < n; i++) {cin >> x[i] >> y[i] >> type[i];  // 输入每个点的坐标 (x[i], y[i]) 和类别 (type[i]: 'A' 或 'B')}// 定义数组 a0, a1, a2 用来存储每次查询的系数int a0[m], a1[m], a2[m];// 读取m组查询的参数,a0[i], a1[i], a2[i]分别是每组查询的系数for (int i = 0; i < m; i++) {cin >> a0[i] >> a1[i] >> a2[i];  // 输入每次查询的系数 (a0[i], a1[i], a2[i])}// 针对每个查询,判断是否能够完美分割A类和B类点for (int i = 0; i < m; i++) {vector<bool> A;  // 存储类别A点的判断结果 (每个A类点是否满足超平面条件)vector<bool> B;  // 存储类别B点的判断结果 (每个B类点是否满足超平面条件)// 针对每个点,计算表达式值,并根据值决定其属于A类还是B类for (int j = 0; j < n; j++) {// 对于类别A的点,判断表达式 a0[i] + a1[i]*x[j] + a2[i]*y[j] 是否大于0// 将判断结果存储在A中int value = a0[i] + a1[i] * x[j] + a2[i] * y[j];if (type[j] == 'A') {A.push_back(value > 0);  // 如果A类点的值大于0,认为它符合该超平面条件} // 对于类别B的点,做同样的判断,结果存储在B中else {B.push_back(value > 0);  // 如果B类点的值大于0,认为它符合该超平面条件}}int flag = 0;  // flag 用于标识是否存在不一致的情况(如果有不一致,flag置为1)// 检查A中的所有值是否一致for (int i = 1; i < A.size(); i++) {if (A[i] != A[i - 1]) {  // 如果A类点中存在不一致的判断,说明它们无法被同一个超平面分割flag = 1;  // 设置标志为1,表示存在不一致break;}}// 如果A类的判断一致,检查B类中的所有值是否一致if (flag == 0) {for (int i = 1; i < B.size(); i++) {if (B[i] != B[i - 1]) {  // 如果B类点中存在不一致的判断,说明它们无法被同一个超平面分割flag = 1;  // 设置标志为1,表示存在不一致break;}}}// 如果A类和B类的判断结果都一致,且A类的判断与B类不冲突,则输出"YES",否则输出"NO"if (flag == 0 && A[0] != B[0]) {cout << "YES" << endl;  // 说明可以找到一个超平面将A类和B类完全分割} else {cout << "NO" << endl;  // 否则说明无法找到符合条件的超平面}}return 0;
}

欢迎大家和我沟通交流(✿◠‿◠)


http://www.ppmy.cn/devtools/162975.html

相关文章

鸿蒙5.0实战案例:基于WaterFlow的页面滑动加载

往期推文全新看点&#xff08;文中附带全新鸿蒙5.0全栈学习笔录&#xff09; ✏️ 鸿蒙&#xff08;HarmonyOS&#xff09;北向开发知识点记录~ ✏️ 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

深度集成DeepSeek大模型:WebSocket流式聊天实现

目录 5分钟快速接入DeepSeek大模型&#xff1a;WebSocket实时聊天指南创建应用开发后端代码 (Python/Node.js)结语 5分钟快速接入DeepSeek大模型&#xff1a;WebSocket实时聊天指南 创建应用 访问DeepSeek官网 前往 DeepSeek官网。如果还没有账号&#xff0c;需要先注册一个。…

体育数据网站推荐系统开发:赛事数据、前瞻分析与智能推荐

体育数据网站作为集赛事数据、前瞻分析、专家解读于一体的综合平台&#xff0c;其推荐系统的开发需要充分考虑多维度数据的整合与应用。本文将深入探讨如何构建一个智能化的体育数据推荐系统。 一、系统架构设计 数据采集层&#xff1a; 实时赛事数据API接入 专家分析内容抓…

游戏引擎学习第120天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上次回顾&#xff1a;周期计数代码 我们正在进行一个项目的代码优化工作&#xff0c;目标是提高性能。当前正在优化某个特定的代码片段&#xff0c;已经将其执行周期减少到48个周期。为了实现这一目标&#xff0c;我们设计了一个…

flutter Running Gradle task ‘assembleDebug‘...

这个和单独的android还不太一样 Flutter 在Android studio运行时卡在Running Gradle task assembleDebug... - 简书

基于 JavaWeb 的 SSM+Maven 微信小程序快递柜管理系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

什么是HTTP/2协议?NGINX如何支持HTTP/2并提升网站性能?

HTTP/2是一种用于在Web浏览器和服务器之间进行通信的协议&#xff0c;旨在提高网站性能和加载速度。它是HTTP/1.1的继任者&#xff0c;引入了许多优化和改进&#xff0c;以适应现代Web应用的需求。HTTP/2的主要目标是减少延迟、提高效率&#xff0c;以及更好地支持并发请求。 …

deepseek自动化代码生成

使用流程 效果第一步&#xff1a;注册生成各种大模型的API第二步&#xff1a;注册成功后生成API第三步&#xff1a;下载vscode在vscode中下载agent&#xff0c;这里推荐使用cline 第四步&#xff1a;安装完成后&#xff0c;设置模型信息第一步选择API provider&#xff1a; Ope…