B - Make Many Triangles

原题链接

题解

1.我们可以用若干条直线把所有点串起来,串起来的要求是不同直线不共点,这样以每条直线上的两点为底,直线外另一点为顶点配对
令最大的直线上的点数为k,如果n-k>=k/2+k%2,那么这条直线上的点一定可以被消除。否则不行

就变成了若干集合彼此相消,当最大集合大小超过剩余集合总和时无法消除干净?

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct
{
    ll x,y;
}poi[304];

ll cal(ll a,ll b,ll c)
{
    ll x1=poi[a].x-poi[c].x,y1=poi[a].y-poi[c].y,x2=poi[b].x-poi[c].x,y2=poi[b].y-poi[c].y;
    return x1*y2-x2*y1;
}

int main()
{
    ll n;
    cin>>n;
    for(ll i=1;i<=n;i++) cin>>poi[i].x>>poi[i].y;


    ll maxline=0;
    for(ll i=1;i<n;i++)
    {
        for(ll j=i+1;j<=n;j++)
        {
            ll cnt=0;
            for(ll k=1;k<=n;k++)
            {
                if(cal(i,j,k)==0) cnt++;
            }
            maxline=max(maxline,cnt);
        }
    }

    cout<<min(n/3,n-maxline)<<endl;
    return 0;
}

posted @   纯粹的  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示