首页 > 其他分享 >平面拆分

平面拆分

时间:2024-03-19 14:55:40浏览次数:22  
标签:std int double lines 拆分 平面 重边

引言

题目链接:https://www.luogu.com.cn/problem/P8720

思路

首先可以画一个 n = 3 的图找规律:

可以发现划分的平面数有如下的规律:

  1. 重边只有首次出现的那条会影响结果

  2. 加入一条没有重边的直线,划分平面数 + 1

  3. 新加入的直线与之前加入的直线有 a 个不同的交点,则划分平面数 + a

代码

#include <bits/stdc++.h>
#define PDD std::pair<double,double>
#define N 1010

double a,b;
int n,res = 1;
std::set<PDD> lines;

int count(double a, double b) {
    std::set<PDD> p; // 判断有多少个不同的交点
    
    for (auto it = lines.begin(); it != lines.end() ; it ++ ) {
        double c = it->first,d = it->second;
        
        if(a != c) {
            double x = (d - b) / (a - c);
            double y = a * x  + b;
            p.insert({x,y});
        }
    }
    return p.size();
}

int main() {
    int n;
    std::cin >> n;
    
    for (int i = 0 ; i < n ; i ++ ) {
        std::cin >> a >> b;
        if(lines.find({a,b}) == lines.end()) { // 没有重边
            res += count(a,b) + 1;
        }
        lines.insert({a,b});
    }
    
    std::cout << res << '\n';
    
    return 0;
}

标签:std,int,double,lines,拆分,平面,重边
From: https://www.cnblogs.com/NachoNeko/p/18082844

相关文章

  • matinal:SAP FICO会计凭证如何实现自动拆分
    ......
  • CorelDRAW2024中文免费专业平面设计软件,让创意无限飞翔!
    CorelDRAW2024是一款功能强大的专业平面设计软件,它提供了丰富的绘图工具和特效,使用户能够轻松创建各种类型的设计,如图标、海报、宣传册等。无论是从事平面设计、插画、品牌设计还是其他创意领域,CorelDRAW2024都能满足你的需求,帮助你释放无限的创意潜力,让你的设计脱颖而出。......
  • Cocos实例1:实现平面游戏中的滚动地图
    Cocos实例:实现平面游戏中的滚动地图1.应用: 在2D游戏或某些UI界面中,会经常遇到一些循环滚动的背景或元素。例如飞机大战的背景、冒险岛的双层循环滚动背景,模拟视觉效果上角色在无限背景地图中运动。2.实现原理 需要一张上下或左右在顺序排列时可以无缝衔接的背景图片,搭......
  • 【时事篇-05-03】20240316 一笔145元拆分成3笔存款存入(排除有相似性的十位数字)
    背景需求前文提到,每笔都存一样的数目,容易被银行识别违法,【时事篇-05-01】20240112150元存46只货币基金-CSDN博客文章浏览阅读580次,点赞15次,收藏11次。【时事篇-05-01】20240112150元存46只货币基金https://blog.csdn.net/reasonsummer/article/details/136106686前几天我......
  • 代码随想录算法训练营第day46|139.单词拆分 、多重背包
    目录139.单词拆分多重背包 139.单词拆分力扣题目链接(opensnewwindow)给定一个非空字符串s和一个包含非空单词的列表wordDict,判定 s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单......
  • 练习-黑马商城微服务拆分
    第四章-黑马商城项目拆分环境准备linux将linux_environment中Mysql镜像的初始化脚本、配置上传至Linux,并创建docker网络和MySQL容器:#创建网络dockernetworkcreatehm-net#创建MySQL容器dockerrun-d--namemysql\-p3306:3306\-eTZ=Asia/Shanghai\-eMYSQL_R......
  • 代码随想录算法训练营第四十六天| 139.单词拆分 多重背包 背包问题总结篇!
    单词拆分 题目链接:139.单词拆分-力扣(LeetCode)思路:竟然真能转化为背包问题。classSolution{public:boolwordBreak(strings,vector<string>&wordDict){unordered_set<string>t(wordDict.begin(),wordDict.end());vector<bool>dp(s.size()+......
  • 代码随想录算法训练营第四十六天 | 背包问题总结篇!,关于多重背包,你该了解这些!,139.单词
    背包总结听说背包问题很难?这篇总结篇来拯救你了年前我们已经把背包问题都讲完了,那么现在我们要对背包问题进行总结一番。背包问题是动态规划里的非常重要的一部分,所以我把背包问题单独总结一下,等动态规划专题更新完之后,我们还会在整体总结一波动态规划。关于这几种常见......
  • 343. 整数拆分c
    关键就在于,分还是不分是个问题。intmax(inti,intj){if(i>j)returni;returnj;}intintegerBreak(intn){int*dp=(int*)malloc(sizeof(int)*(n+4));dp[0]=0,dp[1]=0,dp[2]=1,dp[3]=2;for(inti=4;i<=n;i++){intmaxn=0;for......
  • C# AutoCAD 图纸合并以及拆分
    拆分和合并非常常规的需求usingAutodesk.AutoCAD.ApplicationServices;usingAutodesk.AutoCAD.DatabaseServices;usingAutodesk.AutoCAD.EditorInput;usingAutodesk.AutoCAD.Geometry;usingAutodesk.AutoCAD.Runtime;usingMicrosoft.VisualBasic.ApplicationServices......