JZOJ 3493. 【NOIP2013模拟联考13】三角形(triangle)
有一个显而易见的做法,枚举一个点,然后其它点到这个点的斜率都求出来,显然斜率相同的点不能成为另外两个点,随便算算就统计答案了
要卡常,可以开一堆头文件优化实现
1 // luogu-judger-enable-o2 2 %:pragma GCC optimize(3) 3 %:pragma GCC optimize("Ofast") 4 %:pragma GCC optimize("inline") 5 %:pragma GCC optimize("-fgcse") 6 %:pragma GCC optimize("-fgcse-lm") 7 %:pragma GCC optimize("-fipa-sra") 8 %:pragma GCC optimize("-ftree-pre") 9 %:pragma GCC optimize("-ftree-vrp") 10 %:pragma GCC optimize("-fpeephole2") 11 %:pragma GCC optimize("-ffast-math") 12 %:pragma GCC optimize("-fsched-spec") 13 %:pragma GCC optimize("unroll-loops") 14 %:pragma GCC optimize("-falign-jumps") 15 %:pragma GCC optimize("-falign-loops") 16 %:pragma GCC optimize("-falign-labels") 17 %:pragma GCC optimize("-fdevirtualize") 18 %:pragma GCC optimize("-fcaller-saves") 19 %:pragma GCC optimize("-fcrossjumping") 20 %:pragma GCC optimize("-fthread-jumps") 21 %:pragma GCC optimize("-funroll-loops") 22 %:pragma GCC optimize("-fwhole-program") 23 %:pragma GCC optimize("-freorder-blocks") 24 %:pragma GCC optimize("-fschedule-insns") 25 %:pragma GCC optimize("inline-functions") 26 %:pragma GCC optimize("-ftree-tail-merge") 27 %:pragma GCC optimize("-fschedule-insns2") 28 %:pragma GCC optimize("-fstrict-aliasing") 29 %:pragma GCC optimize("-fstrict-overflow") 30 %:pragma GCC optimize("-falign-functions") 31 %:pragma GCC optimize("-fcse-skip-blocks") 32 %:pragma GCC optimize("-fcse-follow-jumps") 33 %:pragma GCC optimize("-fsched-interblock") 34 %:pragma GCC optimize("-fpartial-inlining") 35 %:pragma GCC optimize("no-stack-protector") 36 %:pragma GCC optimize("-freorder-functions") 37 %:pragma GCC optimize("-findirect-inlining") 38 %:pragma GCC optimize("-fhoist-adjacent-loads") 39 %:pragma GCC optimize("-frerun-cse-after-loop") 40 %:pragma GCC optimize("inline-small-functions") 41 %:pragma GCC optimize("-finline-small-functions") 42 %:pragma GCC optimize("-ftree-switch-conversion") 43 %:pragma GCC optimize("-foptimize-sibling-calls") 44 %:pragma GCC optimize("-fexpensive-optimizations") 45 %:pragma GCC optimize("-funsafe-loop-optimizations") 46 %:pragma GCC optimize("inline-functions-called-once") 47 %:pragma GCC optimize("-fdelete-null-pointer-checks") 48 #include <bits/stdc++.h> 49 using namespace std; 50 typedef long long ll; 51 const int N = 3010; 52 int x[N], y[N]; 53 double cnt[N]; 54 int n; ll ans; 55 int main() { 56 freopen("triangle.in", "r", stdin); 57 freopen("triangle.out", "w", stdout); 58 scanf("%d", &n); 59 cnt[n] = 1e61; 60 for(int i = 1 ; i <= n ; ++ i) scanf("%d%d", &x[i], &y[i]); 61 for(int i = 1 ; i <= n ; ++ i) { 62 int t = 0; 63 for(int j = 1 ; j <= n ; ++ j) { 64 if(j == i) continue; 65 if(x[i] == x[j]) cnt[++ t] = 1e60; 66 else cnt[++ t] = (double) (y[j] - y[i]) / (x[j] - x[i]); 67 } 68 sort(cnt + 1, cnt + 1 + t); 69 for(int j = 1, tmp = 1 ; j <= t ; ++ j) { 70 if(cnt[j] != cnt[j + 1]) ans += tmp * (n - 1 - tmp), tmp = 1; 71 else ++ tmp; 72 } 73 } 74 printf("%lld\n", ans / 6); 75 }