解题思路
考虑将直线分组,每组内直线互相平行,任意两组直线间交点数量等于两组内直线数量乘积。
分组操作使用dfs,求出交点数量后加入set去重,输出set大小。
时间复杂度O(2NN2)有点鬼畜但是可以通过。
实现
#include <cstdio>
#include <unordered_set>
int a[30];
std::unordered_set<int> st;
int n;
void dfs(int x,int t)
{
if(x==n)
{
int sum=0;
for(int i=1;i<=t;i++)
{
for(int j=1;j<i;j++)
sum+=a[i]*a[j];
}
st.insert(sum);
}
for(int i=x+1;i<=n;i++)
{
a[t+1]=i-x;
dfs(i,t+1);
}
}
int main()
{
scanf("%d",&n);
dfs(0,0);
printf("%d",st.size());
}
标签:直线,set,洛谷,int,题解,交点,P2789
From: https://www.cnblogs.com/neat-isaac/p/18359503/p2789