日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

平面切分

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 平面切分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

平面切分

問題描述

題解:

我對這種題極其非常不擅長。。。
另外吐槽為什么acwing的數據卡的這么死,藍橋杯官網數據那么水
其實題目很簡單,如果只有一個直線,那么就是兩部分,如果是兩個直線,這兩個直線不相交(也就是平行),就是三部分,不想交就是四部分。。。然后枚舉跟多的例子你會發現,平面的數量與直線的交點有關系,我們設一開始平面數為2(也就是一開始有一個直線),增加的平面數量為交點數+1,然后你每次加入新的直線,求之前直線的交點,然后用set存就可以了。但是注意注意!!有可能會出現重合或者平行的直線,對于平行的我們不管他,對于重合的,我們直接跳出當前循環,因為既然重合,說明之前那個直線都和其他的直線算過了,所以當前直線就不能再算了(否則會重復)

代碼:

acwing最后一個點過不去

#include<bits/stdc++.h> typedef long long ll; using namespace std; inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w; } const int maxn=1005; double a[maxn],b[maxn]; set<pair<double ,double > >s; set<pair<double ,double > >::iterator it; bool f[maxn]; int main() {int n;cin>>n;for(int i=1;i<=n;i++){double x,y;cin>>x>>y;s.insert(make_pair(x,y));}int tot=0;for(it=s.begin();it!=s.end();it++){a[tot]=(*it).first;b[tot]=(*it).second;tot++; }ll ans=2;for(int i=1;i<s.size();i++){set<pair<double ,double > >se;for(int j=i-1;j>=0;j--){if(abs(a[i]-a[j])<0.0001){if(abs(b[i]-b[j])<0.0001){f[i]=1;break;}else continue;} double x=(-1.0)*(b[i]-b[j])/(a[i]-a[j]);double y=x*a[i]+b[i];se.insert(make_pair(x,y));}if(f[i]!=1)ans+=(se.size()+1);}cout<<ans; }

總結

以上是生活随笔為你收集整理的平面切分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。