[蓝桥杯 2020 省 B2] 平面切分

news2024/9/23 1:41:12

题目链接

[蓝桥杯 2020 省 B2] 平面切分

题目描述

平面上有 N N N 条直线, 其中第 i i i 条直线是 y = A i ⋅ x + B i y = A_i \cdot x + B_i y=Aix+Bi

请计算这些直线将平面分成了几个部分。

输入格式

第一行包含一个整数 N N N

以下 N N N 行, 每行包含两个整数 A i , B i A_i,B_i Ai,Bi

输出格式

一个整数代表答案。

输入输出样例
输入

3
1 1
2 2
3 3

输出

6

数据范围
  • 1 ≤ N ≤ 1000 1 \leq N \leq 1000 1N1000
  • 1 0 − 5 ≤ A i , B i ≤ 1 0 5 10^{-5} \leq A_i,B_i \leq 10^5 105Ai,Bi105

解法:计算几何 + 计数

在这里插入图片描述
如上图,先有 4 4 4 根绿色的线,然后又来了一根黑色的线,与之前绿色的线共有 4 4 4 个交点。将原来的 5 5 5 个部分,一分为二,即又新增了 5 5 5 个部分(分别是 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5)。

我们可以得出一个结论:如果新来的一条直线 与 已有的直线有 t t t 个交点,那么就会增加 t + 1 t + 1 t+1 个部分。

我们直接枚举每一条直线,与前面直线的交点即可。

注意:可能会出现重边的情况,所以需要去重!

时间复杂度: O ( n 2 ) O(n^2) O(n2)

C++代码:

#include <iostream>
#include <set>
#include <vector>

using namespace std;

using LD = long double;
using PII = pair<int,int>;

int main(){
    int n;
    cin>>n;
    
    vector<LD> k, b;
    set<PII> s;
    
    for(int i = 0;i < n;i++){
        int kk,bb;
        cin>>kk>>bb;
        s.insert(make_pair(kk,bb));
    }
    
    for(auto& [kk,bb]:s){
        k.push_back(kk);
        b.push_back(bb);
    }
    n = k.size();
    set<pair<LD,LD>> st;
    
    int ans = 2;
    for(int i = 1;i < n;i++){
        for(int j = i - 1;j >= 0;j--){
            if(k[i] == k[j]) continue; //两条边平行,肯定没有交点
            LD x = (b[i] - b[j]) / (k[j] - k[i]);
            LD y = k[i] * x + b[i];
            st.insert(make_pair(x, y));
        }
        ans += st.size() + 1;
        st.clear();
    }
    
    cout<<ans<<'\n';
    return 0;
}
 
 

Java代码:

import java.util.*;
import java.io.*;

class Pair {
	public double x;
	public double y;
	public Pair(double _x, double _y) {
		this.x = _x;
		this.y = _y;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
		Pair p = (Pair)obj;
		return (p.x == x) && (p.y == y);
	}

	@Override
	public int hashCode() {
		return Objects.hash(x, y);
	}
	
}

public class Main {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

	
	public static void main(String[] args) throws Exception 
	{
		int n = Integer.parseInt(in.readLine().trim());
		double[] k = new double[n];
		double[] b = new double[n];
		String[] str;
		
		for(int i = 0;i < n;i++) {
			str = in.readLine().split(" ");
			k[i] = Double.parseDouble(str[0]);
			b[i] = Double.parseDouble(str[1]);
			
			for(int j = i - 1;j >= 0;j--) {
				if(k[i] == k[j] && b[i] == b[j]) {
					n--;
					i--;
					break;
				}
			}
		}
		
		
		Set<Pair> st = new HashSet<>();
		int ans = 2;
		for(int i = 1;i < n;i++) {
			for(int j = i - 1;j >= 0;j--) {
				if(k[i] == k[j]) continue;
				double x = (b[i] - b[j]) / (k[j] - k[i]);
				double y = k[i] * x + b[i];
				st.add(new Pair(x, y));
			}
			ans += st.size() + 1;
			st.clear();
		}
		
		System.out.println(ans);
	}
}

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

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

相关文章

总蛋白检测(Total Protein Assay)试剂盒--测定生物样品中胶原蛋白的含量

QuickZyme总胶原蛋白和羟脯氨酸检测试剂盒常用于测定生物样品&#xff08;如组织、组织提取物、细胞提取物和培养基&#xff09;中胶原蛋白的含量。为了正确解释所获得的数据&#xff0c;这些数据应该与一些参考量进行比较&#xff0c;如组织的湿重或干重、蛋白质含量与DNA等。…

2024蓝桥杯每日一题(二分)

一、第一题&#xff1a;教室 解题思路&#xff1a;二分差分 对天数进行二分&#xff0c;在ck函数中用差分方法优化多次区间累加。 【Python程序代码】 n,m map(int,input().split()) a [0] list(map(int,input().split())) d,s,t [0]*(m5),[0]*(m5),[0]*(m5) for…

VR全景在智慧园区中的应用

VR全景如今以及广泛的应用于生产制造业、零售、展厅、房产等领域&#xff0c;如今720云VR全景更是在智慧园区的建设中&#xff0c;以其独特的优势&#xff0c;发挥着越来越重要的作用。VR全景作为打造智慧园区的重要角色和呈现方式已经受到了越来越多智慧园区企业的选择和应用。…

adb常用指令集合

目录 1、查看应用Activity的任务栈2、局域网内无线连接设备3、启动adb服务4、结束adb服务5、查看连接的设备6、安装apk应用7、卸载指定应用8、从电脑拷贝文件到移动设备9、从移动设备拷贝文件到电脑10、重启设备11、查看版本12、调出shell&#xff0c;进入手机设置 1、查看应用…

最新:Selenium操作已经打开的Chrome(免登录)

最近重新尝试了一下&#xff0c;之前写的博客内容。重新捋了一下思路。 目的就是&#xff0c;selenium在需要登录的网站面前&#xff0c;可能就显得有些乏力&#xff0c;因此是不是有一种东西&#xff0c;可以操作它打开我们之前打开过的网站&#xff0c;这样就不用登录了。 …

python基础及网络爬虫

网络爬虫(Web crawler)&#xff0c;有时候也叫网络蜘蛛(Web spider)&#xff0c;是指这样一类程序——它们可以自动连接到互联网站点&#xff0c;并读取网页中的内容或者存放在网络上的各种信息&#xff0c;并按照某种策略对目标信息进行采集&#xff08;如对某个网站的全部页面…

基于JavaWeb开发的springboot网咖管理系统[附源码]

基于JavaWeb开发的springboot网咖管理系统[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &a…

修改AVD默认存放位置

一、背景 Android Studio安装完成后&#xff0c;通常会配置SDK和AVD&#xff0c;在配置SDK时&#xff0c;可以修改SDK位置&#xff0c;所以&#xff0c;安装完成后&#xff0c;SDK的位置已经进行了修改&#xff0c;但是AVD在创建时&#xff0c;没有修改路径&#xff0c;所以默…

视频监控/云存储EasyCVR视频融合平台设备增删改操作不生效是什么原因?

国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流&#xf…

【办公类-21-09】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体”

作品展示&#xff1a; 背景需求&#xff1a; 一、视频处理 1、育婴师培训的现场视频 2、下载视频&#xff0c;将视频换成考题名称 二、音频 视频用格式工厂转成MP3音频 3、转文字doc 把音频放入“网易云见外工作台”转换为“文字" 等待5分钟&#xff0c;音频文字会被写…

计算机组成原理-练手题集合【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下计算机组成原理中的各章练手题&#xff0c;以供大家期末复习和考研复习的时候使用。 参考资料是王道的计算机组成原理和西电的计算机组成原理。 计算机组成原理系列文章传送门&#xff1a; 第一/二章 概述和数…

零基础小白也行,只用一行命令在自己的电脑跑大模型

什么是Ollama Ollama是一款免费开源的工具&#xff0c;拥有开箱即用的大模型&#xff0c;省去安装环境和下载模型的步骤&#xff0c;让零基础的人也能用起大模型。 项目地址 下载方法 通过下载链接可以找到对应的操作系统的下载版本&#xff0c;而且访问该网站不受限制&…

mysql 的一对一主从复制

一、配置主机 1、在主机mysql 配置文件my.cnf&#xff08;位置一般在/etc/my.cnf&#xff09; #在[mysqld]下面配置 #设置主机server-id(唯一) server-id1 #开启binlog文件 bin-log/var/lib/mysql/mysqlbin2、添加授权账号 #格式旧版 #GRANT REPLICATION SLAVE ON *.* TO sl…

个人博客网站前端页面的实现

博客网站前端页面的实现 博客登录页 相关代码 login.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

【数学】【网格】【状态压缩】782 变为棋盘

作者推荐 视频算法专题 本文涉及知识点 数学 网格 状态压缩 LeetCode:782 变为棋盘 一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动&#xff0c;你能任意交换两列或是两行的位置。 返回 将这个矩阵变为 “棋盘” 所需的最小移动次数 。如果不存在可行的变换&am…

PWARL CTF and others

title: 一些复杂点的题目 date: 2024-03-09 16:05:24 tags: CTF 2024年3月9日 今日习题完成&#xff1a; 1.BUU [网鼎杯 2020 半决赛]AliceWebsite 2.[RoarCTF 2019]Online Proxy 3.[Polar CTF]到底给不给flag呢 4.网鼎杯 2020 总决赛]Game Exp [RoarCTF 2019]Online Proxy …

微信小程序云开发教程——墨刀原型工具入门(常用组件)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

初学SpringBoot——请求响应

0 引言 我们在使用SpringBoot开发Java后端项目时候&#xff0c;需要响应前端发送过来的请求&#xff0c;那后端如何响应前端的请求呢&#xff1f;以及前端发送那么多的请求&#xff0c;后端如何根据不同的请求执行不同的代码呢&#xff1f; 1 Postman 当前&#xff0c;主流的…

电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)

电影院订票选座小程序目录 目录 基于微信小程序的电影院购票系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 1、 影院信息管理 2 、电影信息管理 2、 用户功能实现 1、 影院信息 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考…

3月12日 工作记录 DeepSeek-VL阅读笔记

昨天考完试&#xff0c;晚上把那个讨人厌的项目做了阶段结果给合作者展示去了&#xff0c;然后就看到deepseek发布了vision language的技术报告&#xff0c;于是打算今天上午看看。 DeepSeek VL 很多内容直接翻译自其 DeepSeek-VL&#xff0c;下面的我们指的的是deepseek vl的…