洛谷P2789 直线交点数 题解

解题思路

考虑将直线分组,每组内直线互相平行,任意两组直线间交点数量等于两组内直线数量乘积。
分组操作使用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());
}
posted @   整齐的艾萨克  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示