当前位置:网站首页>[Bluebridge cup 2020 preliminary] horizontal segmentation
[Bluebridge cup 2020 preliminary] horizontal segmentation
2022-07-06 11:26:00 【%xiao Q】
subject
Title Description
There is... On the plane N A straight line , Among them the first i This straight line is y = Ai * x + Bi.
Please calculate these lines to divide the plane into several parts .
Input format
The first line contains an integer N.
following N That's ok , Each line contains two integers Ai, Bi.
about 50% The evaluation case of ,1 ≤ N ≤ 4, -10 ≤ Ai, Bi ≤ 10.
For all profiling use cases ,1 ≤ N ≤ 1000, -100000 ≤ Ai, Bi ≤ 100000.
Output format
An integer represents the answer .
sample input Copy
3
1 1
2 2
3 3
sample output Copy
6
analysis
First of all, we need to know a little common sense of Mathematics : In the same plane , If you add a line , It does not intersect all lines in the plane , Then a plane will be added , If it intersects with a straight line in this plane and produces intersections at different positions , Then an additional plane will be added .
Then we are in the process of making questions , Just judge whether to repeat the edge , Calculate the number of different intersections between the newly added line and the previous line , The heavy side is very good judgment , Just mark it with an array , We can also use set( It can automatically remove the weight ).
Reference code
#include <iostream>
#include <cstdio>
#include <set>
#include <vector>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
#include <unordered_map>
#define LL long long
#define rep(i, a, b) for(int i = a; i <= b; i++)
#define reps(i, a, b) for(int i = a; i < b; i++)
#define pre(i, a, b) for(int i = b; i >= a; i--)
using namespace std;
const int N = 1010;
typedef pair<double, double> PDD;
bool st[N]; // Used to mark heavy edges , Prevent double calculation of intersections
double a[N][2];
int main()
{
int n;
cin >> n;
int ans = 1; // At the beginning, there is a plane
rep(i, 1, n)
{
cin >> a[i][0] >> a[i][1];
set<PDD> point; // Calculate the number of different intersections between the line and the line in the plane
rep(j, 1, i - 1)
{
if(st[j]) continue;
if(a[i][0] == a[j][0])
{
if(a[i][1] == a[j][1])
{
st[i] = true;
break;
}
else continue;
}
double x = (a[i][1] - a[j][1]) / (a[j][0] - a[i][0]);
double y = a[i][0] * x + a[i][1];
point.insert({
x, y});
}
if(!st[i]) ans += point.size() + 1;
}
cout << ans << endl;
return 0;
}
边栏推荐
- 基于apache-jena的知识问答
- Classes in C #
- 快来走进JVM吧
- PyCharm中无法调用numpy,报错ModuleNotFoundError: No module named ‘numpy‘
- Pytorch基础
- 解决安装Failed building wheel for pillow
- Base de données Advanced Learning Notes - - SQL statements
- ES6 promise object
- Julia 1.6 1.7 common problem solving
- How to configure flymcu (STM32 serial port download software) is shown in super detail
猜你喜欢
一键提取pdf中的表格
PyCharm中无法调用numpy,报错ModuleNotFoundError: No module named ‘numpy‘
neo4j安装教程
[number theory] divisor
自动机器学习框架介绍与使用(flaml、h2o)
About string immutability
Error connecting to MySQL database: 2059 - authentication plugin 'caching_ sha2_ The solution of 'password'
MySQL与c语言连接(vs2019版)
Unable to call numpy in pycharm, with an error modulenotfounderror: no module named 'numpy‘
Use dapr to shorten software development cycle and improve production efficiency
随机推荐
About string immutability
ES6 let and const commands
jS数组+数组方法重构
Install mongdb tutorial and redis tutorial under Windows
How to build a new project for keil5mdk (with super detailed drawings)
Tcp/ip protocol (UDP)
数据库高级学习笔记--SQL语句
JDBC原理
Did you forget to register or load this tag 报错解决方法
Vs2019 desktop app quick start
Why can't I use the @test annotation after introducing JUnit
JDBC原理
C语言读取BMP文件
Ansible实战系列一 _ 入门
vs2019 使用向导生成一个MFC应用程序
MySQL的一些随笔记录
QT creator custom build process
How to set up voice recognition on the computer with shortcut keys
02 staff information management after the actual project
Nanny level problem setting tutorial