【题意】平面上n个点,判断能组成多少不同个三角形?

【解题方法】所有可能的组合来减去共线的就行了。。。

【AC 代码】

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,x[2005],y[2005],cnt[405][405];
ll ans;
int main()
{
    cin>>n;
    for(int i=1; i<=n; i++) cin>>x[i]>>y[i];
    ans=(ll)n*(n-1)*(n-2)/6;
    for(int i=1; i<=n; i++){
        memset(cnt,0,sizeof(cnt));
        for(int j=i+1; j<=n; j++){
            int dx=x[i]-x[j],dy=y[i]-y[j];
            int g=__gcd(dx,dy);
            dx=dx/g+200,dy=dy/g+200;
            ans-=cnt[dx][dy];
            cnt[dx][dy]++;
        }
    }
    cout<<ans<<endl;
}