P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair

news2025/4/3 14:59:29

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair

      • 题目
  • 分析
    • 一、pair
    • 1.1pair与vector的区别
    • 1.2 两者使用场景
    • 两者组合使用
  • 二、set
    • 2.1核心特点
    • 2.2set的基本操作
    • 2.3 set vs unordered_set
    • 示例:统计唯一单词数
      • 代码

题目

在这里插入图片描述

分析

大佬写的很明白,看这儿

我讲讲其中用到的知识点吧!

一、pair

pair是 C++ 中的一个模板类,用于存储两个值(可以是不同类型)。

1、基本用法

#include <iostream>
#include <utility> // pair 的头文件
using namespace std;

int main() {
    pair<int, string> student = {18, "小明"}; // 存储年龄和姓名
    cout << "年龄: " << student.first << endl;   // 输出 18
    cout << "姓名: " << student.second << endl;  // 输出 小明
    return 0;
}

2、核心特性:
pair 中的两个值可以是不同类型(如 int 和 string)。
通过 .first 和 .second 访问两个值。

3、pair 的常见用途

1)存储关联数据
例如,存储一个点的坐标 (x, y)

pair<double, double> point = {3.14, 2.71};

2)函数返回两个值

pair<bool, int> checkValue(int x) {
    if (x > 0) return {true, x};
    else return {false, 0};
}

1.1pair与vector的区别

在这里插入图片描述

1.2 两者使用场景

对pair:

  1. 坐标 (x, y)。
  2. 一个学生的年龄和姓名 (int, string)

对vector:

需要存储一组同类型数据,例如:
学生成绩列表 [90, 85, 95]。
一组字符串 [“apple”, “banana”, “cherry”]。

两者组合使用

vector<pair<double, double>> points;
points.push_back({1.0, 2.0}); // 添加点 (1.0, 2.0)
points.push_back({3.0, 4.0}); // 添加点 (3.0, 4.0)

// 遍历所有点
for (auto p : points) {
    cout << "x: " << p.first << ", y: " << p.second << endl;
}

二、set

set是 C++ 中的一个重要容器,用于存储一组唯一且有序的元素。set 是 C++ 中的一个重要容器,用于存储一组唯一且有序的元素。它的核心特性是自动去重自动排序,非常适合处理需要唯一性和顺序性的数据。

2.1核心特点

在这里插入图片描述

2.2set的基本操作

(1) 创建 set

#include <set>
using namespace std;

set<int> s1;                // 默认升序排列的整数集合
set<string> s2;             // 字符串集合
set<pair<int, int>> s3;     // 存储 pair 的集合

(2) 插入元素

s1.insert(3);       // 插入元素 3
s1.insert(1);       // 插入元素 1
s1.insert(2);       // 插入元素 2
s1.insert(3);       // 重复插入 3,会被自动忽略
// 此时 s1 = {1, 2, 3}

(3) 遍历 set

//若set<pair<int,int>> s1;
//for(auto &i:s1) cout<<num;
for (auto num : s1) {
    cout << num << " ";   // 输出 1 2 3
}

(4) 查找元素

auto it = s1.find(2);
if (it != s1.end()) {
    cout << "元素 2 存在!" << endl;
}

(5) 删除元素

s1.erase(2);        // 删除元素 2
s1.erase(s1.begin()); // 删除第一个元素(即 1)

2.3 set vs unordered_set

在这里插入图片描述

示例:统计唯一单词数

#include <iostream>
#include <set>
using namespace std;

int main() {
    set<string> uniqueWords;
    string word;
    
    while (cin >> word) {  // 输入单词,按 Ctrl+Z (Windows) 或 Ctrl+D (Mac) 结束
        uniqueWords.insert(word);
    }
    
    cout << "唯一单词数: " << uniqueWords.size() << endl;
    return 0;
}
//输入:apple banana apple cherry banana
//输出:唯一单词数: 3

代码

#include <iostream>
#include <vector>
#include <set>
#include <string>
#include <algorithm>
#include <math.h>
#include <queue>
#include <climits>  // 包含INT_MAX常量
#include <cctype>
using namespace std;
int n;
typedef pair<long double, long double> DL;
set<DL> f;
DL a[1010];

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		int k, b;
		cin >> k >> b;
		f.insert({k, b});
	}
	int cnt = 0;
	for (auto &i : f) {
		a[cnt++] = i;
	}
	int ans = 1;
	for (int i = 0; i < cnt; i++) {
		set<DL> d;
		for (int j = 0; j < i; j++) {
			long double k1 = a[i].first;
			long double b1 = a[i].second;
			long double k2 = a[j].first;
			long double b2 = a[j].second;
			if (k1 == k2)
				continue;
		//注意,交点的x,y值是浮点型,别定义成int了!!!
			long double x = (b2 - b1) / (k1 - k2);
			long double y = k1 * x + b1;
			d.insert({x, y});
		}
		ans += d.size() + 1;
	}
	cout << ans << endl;
	return 0;
}

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

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

相关文章

postgresql源码学习(60)—— VFD的作用及机制

首先VFD是Virtual File Descriptor&#xff0c;即虚拟文件描述符&#xff0c;既然是虚拟的&#xff0c;一定先有物理的。 一、 物理文件描述符&#xff08;File Descriptor, FD&#xff09; 1. 什么是 FD 它是操作系统提供给用户程序访问和操作文件或其他 I/O 资源的抽象接口…

【CSS—前端快速入门】CSS 选择器

CSS 1. CSS介绍 1.1 什么是CSS? CSS(Cascading Style Sheet)&#xff0c;层叠样式表&#xff0c;用于控制页面的样式&#xff1b; CSS 能够对网页中元素位置的排版进行像素级精确控制&#xff0c;实现美化页面的效果&#xff1b;能够做到页面的样式和 结构分离&#xff1b; 1…

Linux安装jdk,node,mysql,redis

准备工作&#xff1a; 1.安装VMware软件&#xff0c;下载CentOs7镜像文件&#xff0c;在VMware安装CentOs7 2.宿主机安装Xshell用来操作linux 3. .宿主机安装Xftp用来在宿主机和虚拟机的linux传输文件 案例1&#xff1a;在 /home/soft文件夹解压缩jdk17&#xff0c;并配置环…

深度求索(DeepSeek)的AI革命:NLP、CV与智能应用的技术跃迁

Deepseek官网&#xff1a;DeepSeek 引言&#xff1a;AI技术浪潮中的深度求索 近年来&#xff0c;人工智能技术以指数级速度重塑全球产业格局。在这场技术革命中&#xff0c;深度求索&#xff08;DeepSeek&#xff09;凭借其前沿的算法研究、高效的工程化能力以及对垂直场景的…

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器&#xff0c;支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发&#xff0c;拥有轻量级、高性能、易部署等特点&#xff0c;并且可以自由…

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示&#xff0c;登录阿里云百炼人工智能业务控制台&#xff0c;创建智能体应用&#xff0c;智能体应用是一个agent&#xff0c;即提供个人或者企业的代理或中间件组件应用&#xff0c;对接阿里云大模型公共平台&#xff0c;为个人或者企业用户提供大模型应…

原型链与继承

#搞懂还是得自己动手# 原型链 function Person(name) { this.name name; } Person.prototype.sayName function() { console.log(this.name); };const p new Person("Alice"); 原型链关系图&#xff1a; 原型链&#xff1a;person->Person.prototype->O…

动态规划 ─── 算法5

动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种用于解决复杂问题的算法设计技术&#xff0c;特别适用于具有重叠子问题和最优子结构性质的问题。动态规划通过将问题分解为更小的子问题&#xff0c;并存储子问题的解来避免重复计算&#xff0c;…

博客系统--测试报告

博客系统--测试报告 项目背景项目功能功能测试①登录功能测试②发布博客功能测试③删除文章功能测试④功能测试总结&#xff1a; 自动化测试自动化脚本执行界面&#xff1a; 性能测试 本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试&#xff0…

【博资考4】网安学院-硕转博考试内容

【博资考4】硕转博考试内容 - 网络安全与基础理论 写在最前面一. **21年硕转博面试内容回顾**网络、逆向、操作系统、攻防、漏洞1. **网络安全常见攻击方式及其防范措施**1.1 **DDoS攻击&#xff08;分布式拒绝服务&#xff09;**1.2 **SQL注入攻击**1.3 **XSS攻击&#xff08;…

GPT-4.5 怎么样?如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作

GPT-4.5 怎么样&#xff1f;如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作 今天我们来说说上午发布的GPT-4.5&#xff0c;接下来我们说说GPT4.5到底如何&#xff0c;有哪些功能&#xff1f;有哪些性能提升&#xff1f;怎么快速使用到GPT-4.…

基于专利合作地址匹配的数据构建区域协同矩阵

文章目录 地区地址提取完成的处理代码 在专利合作申请表中&#xff0c;有多家公司合作申请。在专利权人地址中&#xff0c; 有多个公司的地址信息。故想利用这里多个地址。想用这里的地址来代表区域之间的专利合作情况代表区域之间的协同、协作情况。 下图是专利合作表的一部分…

0x02 js、Vue、Ajax

文章目录 js核心概念js脚本引入html的方式基础语法事件监听 Vuevue简介v-forv-bindv-if&v-showv-model&v-on Ajax js 核心概念 JavaScript&#xff1a;是一门跨平台、面向对象的脚本语言&#xff0c;用来控制网页行为实现交互效果&#xff0c;由ECMAScript、BOM、DOM…

IDEA 使用codeGPT+deepseek

一、环境准备 1、IDEA 版本要求 安装之前确保 IDEA 处于 2023.x 及以上的较新版本。 2、Python 环境 安装 Python 3.8 或更高版本 为了确保 DeepSeek 助手能够顺利运行&#xff0c;您需要在操作系统中预先配置 Python 环境。具体来说&#xff0c;您需要安装 Python 3.8 或更高…

Linux笔记---一切皆文件

1. 含义 “一切皆文件”是 Linux 对系统资源的高度抽象&#xff0c;通过文件接口屏蔽底层差异&#xff0c;提供了简洁、一致的操作方式。这种设计降低了系统复杂性&#xff0c;使得工具、脚本和应用程序能够以统一模式处理多样化资源&#xff0c;是 Linux 强大灵活性的重要基石…

DeepSeek开源周,第五弹再次来袭,3FS

Fire-Flyer 文件系统&#xff08;3FS&#xff09;总结&#xff1a; 一、核心特点 3FS 是一个专为 AI 训练和推理工作负载设计的高性能分布式文件系统&#xff0c;利用现代 SSD 和 RDMA 网络&#xff0c;提供共享存储层&#xff0c;简化分布式应用开发。其主要特点包括&#xf…

【音视频】VLC播放器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 一、vlc是什么&#xff1f; VLC Media Player&#xff08;简称VLC&#xff09;是一款免费、开源、跨平台的多媒体播放器&#xff0c;由非营利组织VideoLAN开发&#xff0c;最…

【软件测试】_使用selenium进行自动化测试示例

目录 1. 导入依赖 2. 使用selenium编写测试代码 3. 运行结果 4. 关于浏览器驱动管理及浏览器驱动配置 创建一个空项目用于进行selenium的自动化测试。 1. 导入依赖 <dependencies><!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager…

【清华大学】DeepSeek从入门到精通完整版pdf下载

DeepSeek从入门到精通.pdf 一共104页完整版 下载链接: https://pan.baidu.com/s/1-gnkTTD7EF2i_EKS5sx4vg?pwd1234 提取码: 1234 或 链接&#xff1a;https://pan.quark.cn/s/79118f5ab0fd 一、DeepSeek 概述 背景与定位 DeepSeek 的研发背景 核心功能与技术特点&#xff08…

题解 | 牛客周赛83 Java ABCDEF

目录 题目地址 做题情况 A 题 B 题 C 题 D 题 E 题 F 题 牛客竞赛主页 题目地址 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 做题情况 A 题 输出两个不是同一方位的字符中的任意一个就行 import java.io.*; import java.math.*; import java…