UVA
来源:互联网 发布:js控制div旋转 编辑:程序博客网 时间:2024/06/13 03:16
http://www.cnblogs.com/zyb993963526/p/6353892.html?utm_source=itdadao&utm_medium=referral
#include <algorithm>#include <iostream>#include <sstream>#include <utility>#include <string>#include <vector>#include <queue>#include <map>#include <set>#include <cstring>#include <cstdio>#include <cmath>#define met(a,b) memset(a, b, sizeof(a));#define IN freopen("in.txt", "r", stdin);#define OT freopen("out.txt", "w", stdout);using namespace std;typedef long long LL;typedef pair<int, int> PII;const int maxn = 1e5 + 100;const int INF = 0x7fffffff;const int dir[5][2] = {0,0,-1,0,1,0,0,-1,0,1};const LL MOD = 1e9 + 7;struct pos{ int x, y, r; double rad; bool operator < (const pos& b) const { return rad < b.rad; } bool Left(const pos& b) const { return x*b.y - y*b.x >= 0; } pos Repair(pos b) { pos tmp; tmp.x = x-b.x; tmp.y = y-b.y; tmp.r = r; if(tmp.r == 1) tmp.x = -tmp.x, tmp.y = -tmp.y; tmp.rad = atan2(tmp.y, tmp.x); return tmp; }}p[maxn], q[maxn];int n, qid, ans, cnt, cur;int main() { #ifdef _LOCAL IN; //OT; #endif // _LOCAL while(scanf("%d", &n) == 1 && n) { for(int i = 0; i < n; ++i) { scanf("%d%d%d", &p[i].x, &p[i].y, &p[i].r); } if(n <= 3) { printf("%d\n", n); continue; } ans = 0; for(int i = 0; i < n; ++i) { qid = 0; for(int j = 0; j < n; ++j) if(i!=j) q[qid++] = p[j].Repair(p[i]); sort(q, q+qid); cnt = 2; cur = 0; for(int j = 0; j < qid; ++j) { if(cur == j) cur = (cur+1)%qid, ++cnt; while(cur != j && q[j].Left(q[cur])) { cur = (cur+1)%qid, ++cnt; } --cnt; ans = max(ans, cnt); } } printf("%d\n", ans); } return 0;}