当前位置:网站首页>[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;
}
边栏推荐
猜你喜欢

Kept VRRP script, preemptive delay, VIP unicast details

AcWing 1298. Solution to Cao Chong's pig raising problem

How to configure flymcu (STM32 serial port download software) is shown in super detail

Django running error: error loading mysqldb module solution

When you open the browser, you will also open mango TV, Tiktok and other websites outside the home page

Double to int precision loss

自动机器学习框架介绍与使用(flaml、h2o)

安装numpy问题总结

QT creator shape

基于apache-jena的知识问答
随机推荐
人脸识别 face_recognition
[AGC009D]Uninity
Deoldify项目问题——OMP:Error#15:Initializing libiomp5md.dll,but found libiomp5md.dll already initialized.
01 project demand analysis (ordering system)
报错解决 —— io.UnsupportedOperation: can‘t do nonzero end-relative seeks
Introduction to the easy copy module
Leetcode 461 Hamming distance
Pytorch基础
机器学习--人口普查数据分析
Aborted connection 1055898 to db:
vs2019 使用向导生成一个MFC应用程序
Codeforces Round #771 (Div. 2)
Windows下安装MongDB教程、Redis教程
JDBC原理
vs2019 桌面程序快速入门
Mtcnn face detection
Machine learning notes week02 convolutional neural network
Solution of deleting path variable by mistake
[number theory] divisor
AcWing 179.阶乘分解 题解