hzwer已经说的很好了,在此只能跪烂了

 

 1 /**************************************************************
 2     Problem: 1914
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:88 ms
 7     Memory:3160 kb
 8 ****************************************************************/
 9  
10 #include <cstdio>
11 #include <cmath>
12 #include <algorithm>
13  
14 using namespace std;
15 typedef long long ll;
16 typedef double lf;
17 const int N = 100005;
18  
19 int n;
20 ll cnt = 0;
21  
22 struct P {
23     ll x, y;
24     lf an;
25     P() {}
26     P(ll _x, ll _y, lf _an) : x(_x), y(_y), an(_an) {}
27 }a[N];
28 inline bool operator < (const P &a, const P &b) {
29     return a.an < b.an;
30 }
31 inline ll operator * (const P &a, const P &b) {
32     return (ll) a.x * b.y - a.y * b.x;
33 }
34  
35 inline int read() {
36     int x = 0, sgn = 1;
37     char ch = getchar();
38     while (ch < '0' || '9' < ch) {
39         if (ch == '-') sgn = -1;
40         ch = getchar();
41     }
42     while ('0' <= ch && ch <= '9') {
43         x = x * 10 + ch - '0';
44         ch = getchar();
45     }
46     return sgn * x;
47 }
48  
49 void work() {
50     int r = 1, t = 0, i;
51     for (i = 1; i <= n; ++i) {
52         while ((r % n + 1) != i && a[i] * a[r % n + 1] >= 0) ++t, ++r;
53         cnt += (ll) t * (t - 1) / 2;
54         --t;
55     }
56 }
57  
58 int main() {
59     n = read();
60     int i, X, Y;
61     for (i = 1; i <= n; ++i) {
62         X = read(), Y = read();
63         a[i] = P(X, Y, atan2(Y, X));
64     }
65     sort(a + 1, a + n + 1);
66     work();
67     printf("%lld\n", (ll) n * (n - 1) * (n - 2) / 6 - cnt);
68     return 0;
69 }
View Code

 话说为了Rank 1我又丧病的使用了fread...还正是神器啊Orz

 

 1 /**************************************************************
 2     Problem: 1914
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:60 ms
 7     Memory:4728 kb
 8 ****************************************************************/
 9  
10 #include <cstdio>
11 #include <cmath>
12 #include <algorithm>
13  
14 using namespace std;
15 typedef long long ll;
16 typedef double lf;
17 const int N = 100005;
18 const int Maxbuf = 1600005;
19 int n;
20 ll cnt = 0, Left = 0, len;
21 char buf[Maxbuf];
22  
23 struct P {
24     ll x, y;
25     lf an;
26     P() {}
27     P(ll _x, ll _y, lf _an) : x(_x), y(_y), an(_an) {}
28 }a[N];
29 inline bool operator < (const P &a, const P &b) {
30     return a.an < b.an;
31 }
32 inline ll operator * (const P &a, const P &b) {
33     return (ll) a.x * b.y - a.y * b.x;
34 }
35  
36 inline int read() {
37     int x = 0, sgn = 1;
38     while (buf[Left] < '0' || '9' < buf[Left]) {
39         if (buf[Left] == '-') sgn = -1;
40         ++Left;
41     }
42     while ('0' <= buf[Left] && buf[Left] <= '9') {
43         x = x * 10 + buf[Left] - '0';
44         ++Left;
45     }
46     return sgn * x;
47 }
48  
49 void work() {
50     int r = 1, t = 0, i;
51     for (i = 1; i <= n; ++i) {
52         while ((r % n + 1) != i && a[i] * a[r % n + 1] >= 0) ++t, ++r;
53         cnt += (ll) t * (t - 1) / 2;
54         --t;
55     }
56 }
57  
58 int main() {
59     len = fread(buf, 1, Maxbuf, stdin);
60     buf[len] = ' ';
61     n = read();
62     int i, X, Y;
63     for (i = 1; i <= n; ++i) {
64         X = read(), Y = read();
65         a[i] = P(X, Y, atan2(Y, X));
66     }
67     sort(a + 1, a + n + 1);
68     work();
69     printf("%lld\n", (ll) n * (n - 1) * (n - 2) / 6 - cnt);
70     return 0;
71 }
View Code

(p.s. 比Rank 2快了2ms 23333)

posted on 2014-11-17 16:48  Xs酱~  阅读(203)  评论(0编辑  收藏  举报