JZOJ 5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven

首先由一个显然的二分之后并查集维护连通性,然后判断上下边界是否处于同一集合的优秀会被卡TLE的做法大概和noip2017的D2T1没啥区别所以这是压到了noip原题吗

正解:https://blog.csdn.net/cold_chair/article/details/78345850

 1 %:pragma GCC optimize(2)
 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 const int N = 6010;
51 const double eps = 1e-6;
52 int n, m, k;
53 struct P { int x, y; } p[N];
54 int fa[N];
55 int get(int x) { return x == fa[x] ? x : fa[x] = get(fa[x]); }
56 double dis(int i, int j) { return sqrt(pow(p[i].x - p[j].x, 2) + pow(p[i].y - p[j].y, 2)); }
57 bool check(double r) {
58     for(int i = 1 ; i <= k + 2 ; ++ i) fa[i] = i;
59     for(int i = 1 ; i <= k ; ++ i) {
60         if(p[i].y <= r * 2) fa[get(i)] = get(k + 1);
61         if(m - p[i].y <= r * 2) fa[get(i)] = get(k + 2);
62     }
63     for(int i = 1 ; i <= k ; ++ i) {
64         for(int j = i + 1 ; j <= k ; ++ j) {
65             if(dis(i, j) <= r * 2) {
66                 fa[get(i)] = get(j);
67             }
68         }
69     }
70     if(get(k + 1) == get(k + 2)) return 0;
71     return 1;
72 }
73 int main() {
74     freopen("starway.in", "r", stdin);
75     freopen("starway.out", "w", stdout);
76     scanf("%d%d%d", &n, &m, &k);
77     for(int i = 1 ; i <= k ; ++ i) scanf("%d%d", &p[i].x, &p[i].y);
78     double l = 0, r = m;
79     for(int i = 1 ; i <= 40 ; ++ i) {
80         double mid = (l + r) / 2;
81         if(check(mid)) l = mid;
82         else r = mid;
83     }
84     printf("%.10lf\n", l);
85 }
TLE的二分做法 JZOJ 5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven
 1 %:pragma GCC optimize(2)
 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 const int N = 6010;
51 const double inf = 1e60;
52 int n, m, k;
53 struct P { int x, y; } p[N];
54 int vis[N]; double dis[N];
55 double getdis(int i, int j) { return sqrt(pow(p[i].x - p[j].x, 2) + pow(p[i].y - p[j].y, 2)); }
56 int main() {
57     freopen("starway.in", "r", stdin);
58     freopen("starway.out", "w", stdout);
59     scanf("%d%d%d", &n, &m, &k);
60     for(int i = 1 ; i <= k ; ++ i) scanf("%d%d", &p[i].x, &p[i].y);
61     for(int i = 1 ; i <= k ; ++ i) dis[i] = m - p[i].y;
62     dis[k + 1] = m;
63     dis[0] = inf;
64     double ans = 0;
65     while(1) {
66         int id = 0;
67         for(int i = 1 ; i <= k + 1 ; ++ i) if(!vis[i] && dis[i] < dis[id]) id = i;
68         ans = max(ans, dis[id]);
69         if(id == k + 1) break;
70         for(int i = 1 ; i <= k ; ++ i) dis[i] = min(dis[i], getdis(i, id));
71         dis[k + 1] = min(dis[k + 1], (double) p[id].y);
72         vis[id] = 1;
73     }
74     printf("%.10lf\n", ans / 2);
75 }
JZOJ 5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven
posted @ 2018-08-09 22:21  KingSann  阅读(226)  评论(0编辑  收藏  举报