1 /*************************************************************************
2 > File Name: code/hust/20151025/DDD.cpp
3 > Author: 111qqz
4 > Email: rkz2013@126.com
5 > Created Time: 2015年10月26日 星期一 20时16分47秒
6 ************************************************************************/
7
8
9
10 #include<iostream>
11 #include<iomanip>
12 #include<cstdio>
13 #include<algorithm>
14 #include<cmath>
15 #include<cstring>
16 #include<string>
17 #include<map>
18 #include<set>
19 #include<queue>
20 #include<vector>
21 #include<stack>
22 #include<cctype>
23
24 #define yn hez111qqz
25 #define j1 cute111qqz
26 #define ms(a,x) memset(a,x,sizeof(a))
27 using namespace std;
28 const int dx4[4]={1,0,0,-1};
29 const int dy4[4]={0,-1,1,0};
30 typedef long long LL;
31 typedef double DB;
32 const int inf = 0x3f3f3f3f;
33 const int N=1E3+7;
34 int n;
35
36 struct Q
37 {
38 int t,s,f;
39 int fint;
40 int cost;
41 int id;
42 int dir;
43
44 }q[N];
45
46 int cnt[N];
47
48
49 bool cmp(Q a,Q b)
50 {
51 return a.t<b.t;
52 }
53 int main()
54 {
55 #ifndef ONLINE_JUDGE
56 freopen("in.txt","r",stdin);
57 #endif
58
59 scanf("%d",&n);
60 for ( int i = 0 ; i < n ;i++)
61 {
62 scanf("%d %d %d",&q[i].t,&q[i].s,&q[i].f);
63 q[i].id= i;
64 if (q[i].s<q[i].f)
65 {
66 q[i].dir = 1;
67 q[i].cost = q[i].f-q[i].s;
68 }
69 else
70 {
71 q[i].dir = 0;
72 q[i].cost = q[i].s - q[i].f;
73 }
74 q[i].fint = q[i].t + q[i].cost;
75 }
76
77 sort(q,q+n,cmp);
78 ms(cnt,0);
79 for ( int i = 0 ; i < n ; i++)
80 for ( int j = i+1 ; j < n ; j++)
81 {
82 if (q[i].dir==q[j].dir)
83 {
84 // if (q[i].fint<q[j].t) continue;
85 // cout<<"i:"<<q[i].id<<" j:"<<q[j].id<<endl;
86 if (q[j].t-q[i].t+q[i].s==q[j].s&&q[i].fint>=q[j].t&&q[i].dir==1)
87 {
88 cnt[q[i].id]++;
89 cnt[q[j].id]++;
90 }
91 if (q[i].s-(q[j].t-q[i].t)==q[j].s&&q[i].fint>=q[j].t&&q[i].dir==0) //wa了31次之后
92 //发现。。。除了写错之外。
93 //只有两个地方没考虑清楚。。
94 //一个是误以为同方向()的可以一块考虑。
95 //实际上不能。因为这个wa了五六次。
96 //另一个是相向判相遇的时候,条件要判
97 //同一时刻的。。。比如j出现时,i在q[i].s+(q[j].t-q[i].s)(以i正向为例)。。。。
98 //热泪盈眶。。。。
99 //WA 了这么多次还有一个原因是。。。忘记前后的答案是相互影响的。。。我把前面修改后反而对的点更少了。。写成错的反而对得多
100 //差点怀疑人生了都。。。其实是因为后面还有写错。。。前面多算。。后面少算。。答案碰巧对了而已2333
101 {
102 cnt[q[i].id]++;
103 cnt[q[j].id]++;
104 }
105 }
106 else
107 {
108
109 if (q[i].dir==1)
110 {
111 int limt = min(q[i].fint,q[j].fint);
112 int nowi = q[i].s+(limt-q[i].t);
113 int nowj = q[j].s-(limt-q[j].t);
114 // cout<<"limt:"<<limt<<endl;
115 // cout<<"i:"<<q[i].id<<" j:"<<q[j].id<<"nowi:"<<nowi<<" nowj:"<<nowj<<endl;
116 if (nowi>=nowj&&q[i].s+(q[j].t-q[i].t)<=q[j].s)
117 {
118 cnt[q[i].id]++;
119 cnt[q[j].id]++;
120 }
121 }
122 else
123 {
124 int limt = min(q[i].fint,q[j].fint);
125 int nowi = q[i].s-(limt-q[i].t);
126 int nowj = q[j].s+(limt-q[j].t);
127 // cout<<"lim:"<<limt<<endl;
128 // cout<<"ii:"<<q[i].id<<" j:"<<q[j].id <<"nowi:"<<nowi<<" nowj"<<nowj<<endl;
129 if (nowj>=nowi&&q[i].s-(q[j].t-q[i].t)>=q[j].s)
130 {
131 cnt[q[i].id]++;
132 cnt[q[j].id]++;
133 }
134 }
135 }
136 }
137 for ( int i = 0 ; i < n ; i++)
138 {
139 if (i!=n-1)
140 {
141 printf("%d ",cnt[i]);
142 }
143 else
144 {
145 printf("%d\n",cnt[i]);
146 }
147 }
148
149
150 #ifndef ONLINE_JUDGE
151 fclose(stdin);
152 #endif
153 return 0;
154 }