真是跪烂……我叉积判完了三点共线还去判了三边长的关系……实际上不共线的话三边长关系肯定是满足的……于是因为精度设置问题挂掉了……(我设个1e-12么还有机会,1e-6肯定挂了……)
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #include<string> #include<set> #include<queue> #include<stack> #include<map> #include<cmath> #include<cstdlib> #define ll long long #define maxn 100010 #define inf 1000000000 #define linf (1LL<<50) using namespace std; inline ll read() { ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x*=10;x+=ch-'0';ch=getchar();} return x*f; } inline void read(char *s,int &ts) { char x=getchar(); while(!(x>='a'&&x<='z'))x=getchar(); while(x>='a'&&x<='z')s[++ts]=x,x=getchar(); } int ans=0; int n; int x[maxn],y[maxn]; double f(int a,int b) { return sqrt((x[b]-x[a])*(x[b]-x[a])+(y[b]-y[a])*(y[b]-y[a])); } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); for(int i=1;i<=n-2;i++) for(int j=i+1;j<=n-1;j++) for(int k=j+1;k<=n;k++) if((y[j]-y[i])*(x[k]-x[j])!=(y[k]-y[j])*(x[j]-x[i])) ans++; printf("%d\n",ans); return 0; }