做网站友情链接互换,公司网站用什么程序,机械设计软件solidworks,重庆市建设工程安全管理信息网平面切分
问题描述 题解#xff1a;
我对这种题极其非常不擅长。。。 另外吐槽为什么acwing的数据卡的这么死#xff0c;蓝桥杯官网数据那么水 其实题目很简单#xff0c;如果只有一个直线#xff0c;那么就是两部分#xff0c;如果是两个直线#xff0c;这两个直线不相…平面切分
问题描述 题解
我对这种题极其非常不擅长。。。 另外吐槽为什么acwing的数据卡的这么死蓝桥杯官网数据那么水 其实题目很简单如果只有一个直线那么就是两部分如果是两个直线这两个直线不相交也就是平行就是三部分不想交就是四部分。。。然后枚举跟多的例子你会发现平面的数量与直线的交点有关系我们设一开始平面数为2也就是一开始有一个直线增加的平面数量为交点数1然后你每次加入新的直线求之前直线的交点然后用set存就可以了。但是注意注意有可能会出现重合或者平行的直线对于平行的我们不管他对于重合的我们直接跳出当前循环因为既然重合说明之前那个直线都和其他的直线算过了所以当前直线就不能再算了否则会重复
代码
acwing最后一个点过不去
#includebits/stdc.h
typedef long long ll;
using namespace std;
inline int read(){int s0,w1;char chgetchar();while(ch0||ch9){if(ch-)w-1;chgetchar();}while(ch0ch9) ss*10ch-0,chgetchar();//s(s3)(s1)(ch^48);return s*w;
}
const int maxn1005;
double a[maxn],b[maxn];
setpairdouble ,double s;
setpairdouble ,double ::iterator it;
bool f[maxn];
int main()
{int n;cinn;for(int i1;in;i){double x,y;cinxy;s.insert(make_pair(x,y));}int tot0;for(its.begin();it!s.end();it){a[tot](*it).first;b[tot](*it).second;tot; }ll ans2;for(int i1;is.size();i){setpairdouble ,double se;for(int ji-1;j0;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 yx*a[i]b[i];se.insert(make_pair(x,y));}if(f[i]!1)ans(se.size()1);}coutans;
}