| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:自己拍了上百组大数据都没错,但是死活WAIn Reply To:自己拍了上百组大数据都没错,但是死活WA Posted by:wjzcom at 2017-05-11 18:13:38 > //poj 3714 分治 TLE
> #include<string>
> #include<cstring>
> #include<cmath>
> #include<cstdio>
> #include<cstdlib>
> #include<iostream>
> #include<algorithm>
> #define ll long long
> using namespace std;
>
> const int MAXN = 100000 + 10;
> const int INF = 0x3f3f3f3f;
> int n, s;
> double ans;
> int mid, cnta, cnts;
>
> struct node
> {
> ll x, y;
> } pa[MAXN]; //agent
> node ps[MAXN]; //station
>
> node tempa[MAXN];
> node temps[MAXN];
>
> double dist(node a, node b)
> {
> double ans = sqrt((double)((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));
> return ans;
> }
>
> bool cmp(node a, node b)
> {
> if(a.x == b.x) return a.y < b.y;
> else return a.x < b.x;
> }
>
> bool cmpy(node a, node b)
> {
> return a.y < b.y;
> }
>
> double jue(int a)
> {
> if(a >= 0) return a;
> else return -a;
> }
>
> double solve(int lt, int rt)
> {
> mid = (lt + rt) >> 1;
> ans = INF;
>
> if(lt == rt) return ans;
> if(lt+1 == rt) return min(dist(pa[lt], ps[rt]), dist(ps[lt], pa[rt]));
>
> ans = min(solve(lt, mid), solve(mid, rt));
>
>
> cnta = 0, cnts = 0;
> for(int i = lt; i <= rt; i++)
> {
> if(jue(pa[mid].x-pa[i].x) <= ans) tempa[++cnta] = pa[i];
> if(jue(ps[mid].x-ps[i].x) <= ans) temps[++cnts] = ps[i];
> }
>
> // sort(tempa+1, tempa+1+cnta, cmpy);
> // sort(temps+1, temps+1+cnts, cmpy);
>
> for(int i = 1; i <= cnta; i++)
> for(int j = 1; j <= cnts; j++)
> {
> // if(jue((temps[j].y - tempa[i].y)) > ans) break;
> ans = min(ans, dist(pa[i], ps[j]));
> }
>
> return ans;
> }
>
> int main()
> {
> cin >> s;
> while(s--)
> {
> memset(pa, 0, sizeof(pa));
> memset(ps, 0, sizeof(ps));
>
> cin >> n;
> for(int i = 1; i <= n; i++) cin >> pa[i].x >> pa[i].y;
> for(int i = 1; i <= n; i++) cin >> ps[i].x >> ps[i].y;
>
> sort(pa+1, pa+1+n, cmp);
> sort(ps+1, ps+1+n, cmp);
>
> double res = solve(1, n);
> printf("%.3f\n", res);
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator