P2789 直线交点数题解

题目

假设平面上有N条直线,且无三线共点,那么这些直线一共能有多少不同的交点数?

输入输出格式

输入格式

一行,一个整数N,代表有N条直线。

输出格式

一行,一个整数,表示方案总数。

输入输出样例

输入样例

4

输出样例

5

解析

我们将n条直线编号,分别称为直线1、直线2、…、直线n。直线2与直线1最多有一个交点,直线3与直线1和直线2最多有2个交点,……,直线n与其它 (n-1) 条直线最多 (n-1) 个交点。

由此看出,n条无三线共点的直线最多的交点数max=1+2+…+(n-1)=n(n-1)/2。

但本题我们要求解的是:这 n 条直线共有多少种不同的交点数?

仍然从举例出发。下面列举了 n=1、2、3、4 四种情况各自的交点情况:

具体分析一下n=4的情况:

(1)4 条直线全部平行,则0交点 {4*(4-4)}。

(2)其中 3 条直线平行,则3交点 {3*(4-3)}。

(3)其中 2 条直线平行,则这2条直线与另2条直线的交点数为4,而另2条直线之间可能有0个或1个交点(见n=2的情况,共4个交点或5个交点。{2*(4-2)+0或1}

(4)4 条直线均不平行(可看成1条直线平行),这1条直线与其它3条直线的交点数为3,而其它3条直线之间的交点数为3,共6个交点。{1*(4-1)+3}

经过以上分析,我们可以得如下结论:

m条直线的交点方案=r条平行线与(m-r)条直线交叉的交点数+(m-r)条直线本身的交点方案

=r*(m-r)+(m-r)条直线本身的交点方案 (1<=r<=m)

在具体编程时,我们设置一个标志数组 f[0..max],在使用上述结论递归求解的过程中,每得到一种交点数k,则置f[k]为true(初始f[0]~f[max]均为false)。

#include<iostream>
#include<memory.h>
#include<algorithm>
using namespace std;
int n,maxn=-1,ans=0;
bool f[11000];
void g(int n,int k){
	if(n==0){
		f[k]=true;
		maxn=max(k,maxn);
	}
	else{
		for(int r=n;r>=1;r--){
			g(n-r,r*(n-r)+k);
		}
	}
}
int main(){
	cin>>n;
	memset(f,false,sizeof(f));
	g(n,0);
	for(int i=0;i<=maxn;i++){
		if(f[i]){
			ans++;
		}
	}
	cout<<ans;
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金融知识分享系列之:出场信号RSI指标

金融知识分享系列之&#xff1a;出场信号RSI指标 一、出场信号RSI指标二、RSI指标原理三、 指标用法四、RSI指标总结 一、出场信号RSI指标 名称&#xff1a;相对强弱指标参数&#xff1a;(默认14)组成&#xff1a;RSI线以及30轴、50轴、70轴构成 0-30是极弱&#xff1a;0-30的…

天天爱掼蛋规则

一、牌型 1、单张&#xff1a;任意一张单牌&#xff1b; 2、对子&#xff1a;任意两张点数相同的牌&#xff0c;如33、44&#xff1b; 3、三同张&#xff1a;三张牌点相同的牌型&#xff0c;如555&#xff1b; 4、三同连张&#xff08;也叫钢板&#xff09;&#xff1a;两组…

蓝桥杯单片机快速开发笔记——特训2 按键的长按与短按

一、题目要求 在CT107D单片机综合训练平台上&#xff0c;通过I/O模式编写代码&#xff0c;实现以下功能&#xff1a; 系统上电后&#xff0c;关闭蜂鸣器、继电器和全部指示灯&#xff0c;数码管显示初始值为28&#xff0c;仅显示数码管最右边两位。利用定时器0实现10ms间隔定…

分享基于PDF.js的pdf阅读器代码

一、前言 有时候开发PC端web页面的时候会遇到PDF预览、下载等功能&#xff0c;为了兼容浏览器&#xff0c;需要找一款前端插件进行开发。比较好的PDF插件&#xff0c;就是mozilla的pdf.js&#xff08;注意是mozilla&#xff0c;如果你百度遇到需要收费的&#xff0c;那应该是下…

使用clion开发tftlcd屏,移植驱动时遇到的问题记录

问题现象 屏幕只有一半屏在刷新 问题出现的情况(在CLION开发时遇到过) 总结

构造函数和析构函数两兄弟的作用是什么

[TOP] &#xff08;1&#xff09;构造函数 1.1 概念 对于以下Date类&#xff1a; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year << "-" << _month << …

【综述】二维半导体和晶体管在集成电路未来应用

一篇关于二维半导体和晶体管在集成电路未来应用的综述文章。 文章由Lei Yin、Ruiqing Cheng、Jiahui Ding、Jian Jiang、Yutang Hou、Xiaoqiang Feng、Yao Wen和Jun He*共同撰写&#xff0c;发表在《ACS Nano》2024年第18卷上。 Figure 1: CMOS晶体管的演变 描述了CMOS晶体管…

Mysql数据库事务

目录 一、Mysql数据库事务的概念 1.事务的定义 2.事务的特点 2.1原子性 2.2一致性 2.3隔离性 2.4持久性 3.事务之间的相互影响 3.1脏读 3.2不可重复读 3.3幻读 3.4丢失更新 4.如何解决事务的干扰 4.1read uncommitted——读取尚未提交的数据 4.2read committed—…

ros time 时间戳改为机器开机时间

一、问题描述 因项目需要,需要"ros::Time::now()" 改成获取机器开机时间,此处针对rospy的机器时间修改。 二、修改方法 修改ros源码的文件 /opt/ros/noetic/lib/python3/dist-packages/rospy/rostime.py 修改如下: 定位到 get_rostime() &#xff0c;并将 float_…

面试笔记——MySQL(事务:事务特性、并发事务、事务隔离、Redo Log与Undo Log、MVCC)

事务 概念与特性 事务&#xff08;Transaction&#xff09;指的是一组数据库操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;保证了数据库的一致性和完整性&#xff0c;它使得数据库操作可以按照逻辑上的单元进行组织和执行&#xff0c;提高…

视频号小店入口在哪?怎么运营?全流程分享!

我是电商珠珠 视频号小店是视频号在22年7月宣布的电商平台&#xff0c;是供商家做店所使用。到现在也发展了不过一年的时间&#xff0c;所以有很多商家都想要往这个平台上转&#xff0c;其中包括新手。因为这个平台属于初期&#xff0c;所以红利比较大&#xff0c;规则限制没有…

CDMP认证是一个什么样的证书?有必要参加CDMP培训吗?通过率高不高?

在当前数字化时代&#xff0c;数据管理变得愈发重要。为了满足社会对数据管理人才的紧迫需求&#xff0c;DAMA国际于2004年推出了CDMP数据管理专业认证。这是一项综合资格认证&#xff0c;涵盖学历教育、工作经验和专业知识考试。CDMP认证是全球唯一的数据管理方面权威性认证&a…

[Rust] 使用vscode实现HelloWorld程序并进行debug

一、简介 本文介绍了如何使用vscode编写rust&#xff0c;实现打印"Hello, world!"的程序。 二、工具安装 0. 环境介绍&#xff1a; Linux &#xff08;或者windowswsl&#xff09; 1. 安装rust编译器rustc和包管理器cargo。 请参考连接&#xff1a;Rust 程序设…

wy的leetcode刷题记录_Day92

wy的leetcode刷题记录_Day92 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-22 前言 目录 wy的leetcode刷题记录_Day92声明前言2617. 网格图中最少访问的格子数题目介绍思路代码收获 695. 岛屿的最大面积题目介绍思路代码收获 2…

java网络原理(二)------TCP确认应答和超时重传

一Tcp协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如其名&#xff0c;要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节&#xff0c;范围是0到65535.如…

牛,The O-one ——通过语音交互控制电脑的开源语言模型

模型介绍 The O-one &#xff1a;一个创新的开源语言模型计算机 可以让你通过语音交互来和你的计算机进行对话&#xff0c;完成询问、指令下达等任务。灵感居然来自Andrej Karpathy 的 LLM 操作系统。O1运行一个代码解释语言模型&#xff0c;并在计算机内核发生特定事件时调用…

音视频开发_FFmpeg基石精讲

FFmpeg 框架 核心组件 libavcodec&#xff1a;一个编解码库&#xff0c;包含了众多的编码器和解码器用于编码和解码音视频流。libavformat&#xff1a;一个封装格式库&#xff0c;用于处理各种音视频封装格式。libavutil&#xff1a;一个工具库&#xff0c;提供了常见功能的简…

交互式QGraphicsView(平移/缩放/旋转)

一 简述 Graphics View提供了一个平台&#xff0c;用于大量自定义 2D 图元的管理与交互&#xff0c;框架包括一个事件传播架构&#xff0c;支持场景 Scene 中的图元 Item 进行精确的双精度交互功能。Item 可以处理键盘事件、鼠标按下、移动、释放和双击事件&#xff0c;同时也…

SAP-MM-设置字段默认值

当我们创建订单时&#xff0c;有些字段总是重复输入&#xff0c;每次值也是固定的&#xff0c;例如生产订单 如上图“生产工厂都是1000”如何设置成默认每次进入都是1000呢&#xff1f; 点击字段&#xff0c;F1 查看参数ID“WRK” 输入tcode&#xff1a;SU3 按上图维护数据100…

Quartz完全开发手册(一篇学会Quartz所有知识点)

目录 一、Quartz概念 1.1、Quartz介绍 1.2、使用场景 1.3、特点 二、Quartz运行环境 三、Quartz设计模式 四、Quartz学习的核心概念 4.1、任务Job 4.2、触发器Trigger 4.3、调度器Scheduler 五、Quartz的体系结构与工作流程 5.1、体系结构 5.2、工作流程 六、Quar…