本文共 1002 字,大约阅读时间需要 3 分钟。
源代码:#include #include #define LL long long #define INF 1000000000using namespace std;map i; //这个STL差不多就是一个反类型数组。double f[100001];LL n,Num(0);LL C(LL N,LL M) //排列组合。{ if (N =N-M+1;a--) Sum*=a; for (LL a=1;a<=M;a++) Sum/=a; return Sum;}int main(){ scanf("%lld",&n); //%lld这种东西我不想再见到它。 for (LL a=1;a<=n;a++) { LL A,B,C; //还有LL,you,too。 scanf("%lld%lld%lld",&A,&B,&C); if (!B) i[-INF]++; //i[中]的数(double)表示斜率,i[]存储的数表示斜率相同的边的条数。 else { double T=(double(A)/B)*0.01; //处理精度误差。 if (!i[T]) f[++Num]=T; //不同直线的斜率种类。 i[T]++; } } if (i[-INF]) //特判处理。 f[++Num]=-INF; LL Ans=C(n,3); for (LL a=1;a<=Num;a++) //处理不符合情况的方案。 { LL T=i[f[a]]; Ans-=C(T,3); //三边之重。 Ans-=C(T,2)*(n-T); //两边之重。 } printf("%lld",Ans); return 0;}
转载于:https://www.cnblogs.com/Ackermann/p/5997218.html