zoukankan      html  css  js  c++  java
  • ACM-ICPC Asia Training League 暑假第一阶段第五场 BCDI

    B  求两个点到圆的切点的距离加上两个切点的弧长

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const int N = 1e5+10;
     5 double x,y,gx,gy,xa,xb,xc,ya,yb,yc;
     6 double ans1[4], ans2[4];
     7 double dis(double x1, double y1, double x2, double y2) {
     8     return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
     9 }
    10 
    11 int main() {
    12     double x, y, gx, gy, x1, y1, r1, x2, y2, r2;
    13     cin >> x >> y >> gx >> gy >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
    14     double xx1 = dis(x,y,x2,y2);
    15     double xx2 = dis(gx,gy,x2,y2);
    16     double ans1 = sqrt(xx1*xx1-r2*r2);
    17     double ans2 = sqrt(xx2*xx2-r2*r2);
    18     double xx3 = dis(x,y,gx,gy);
    19     double a1 = acos(r2/xx1);
    20     double a2 = acos(r2/xx2);
    21     double a3 = acos((xx1*xx1+xx2*xx2-xx3*xx3)/(2*xx1*xx2));
    22     double ans3 = (a3-a2-a1)*r2;
    23     printf("%.10f
    ",ans1+ans2+ans3);
    24     return 0;
    25 }

    C 滑雪问题,m条路径,从高处往地处滑,求能滑的最长路径是多少,从低往高处求,dfs可以过。

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const int N = 1e3+10;
     5 typedef pair<int,int> P;
     6 vector<P> vs[N];
     7 int d[N];
     8 void dfs(int v) {
     9     for(auto p : vs[v]) {
    10         int u = p.first, w = p.second;
    11         if(d[u] < d[v] + w) {
    12             d[u] = d[v] + w;
    13             dfs(u);
    14         }
    15     }
    16 }
    17 int main() {
    18     int n, m;
    19     cin >> n >> m;
    20     for(int i = 0; i < m; i ++) {
    21         int u, v, w;
    22         cin >> u >> v >> w;
    23         vs[v].push_back(P(u,w));
    24     }
    25     for(int i = 1; i <= n; i ++) {
    26         dfs(i);
    27     }
    28     int MAX = 0;
    29     for(int i = 1; i <= n; i ++) MAX = max(MAX, d[i]);
    30     printf("%d
    ",MAX);
    31     return 0;
    32 }

    D n个数,求有多少中由n+1个数组成的

     1 #include <bits/stdc++.h>
     2 #define INF 0x3f3f3f3f
     3 using namespace std;
     4 int n, x, MIN1 = INF, MIN2 = -INF;
     5 int main() {
     6     cin >> n;
     7     int tmp = 0;
     8     for(int i = 1; i <= n; i ++) {
     9         cin >> x;
    10         tmp = x - tmp;
    11         if(i&1) MIN1 = min(MIN1, tmp);
    12         else MIN2 = max(MIN2,-tmp);
    13     }
    14     if(MIN2>MIN1) printf("0
    ");
    15     else if(MIN2 < 0 && MIN1 < 0) printf("0
    ");
    16     else if(MIN2 < 0 && MIN1 >= 0) printf("%d
    ",MIN1+1);
    17     else printf("%d
    ",MIN1-MIN2+1);
    18     return 0;
    19 }

    I 前面的等级大于后面的,只要前面的赢了后面的就一点赢,全部平均也算英雄赢。

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const int N = 1e5+10;
     5 int n;
     6 int a[N], b[N];
     7 int main() {
     8     int x;
     9     cin >> n;
    10     for(int i = 0; i < n; i ++) cin >> a[i];
    11     for(int i = 0; i < n; i ++) cin >> b[i];
    12     int id = b[0] - a[0];
    13     if(id < 0) return 0*printf("0
    ");
    14     for(int i = 1; i < n; i ++) {
    15         if(b[i] - a[i] > id) {
    16             return 0*printf("%d
    ",id+1);
    17         } else if(b[i] - a[i] < id) {
    18             return 0*printf("%d
    ",id);
    19         }
    20     }
    21     printf("%d
    ",id);
    22     return 0;
    23 }
  • 相关阅读:
    记一道乘法&加法线段树(模版题)
    2021CCPC网络赛(重赛)题解
    Codeforces Round #747 (Div. 2)题解
    F. Mattress Run 题解
    Codeforces Round #744 (Div. 3) G题题解
    AtCoder Beginner Contest 220部分题(G,H)题解
    Educational Codeforces Round 114 (Rated for Div. 2)题解
    Codeforces Global Round 16题解
    Educational Codeforces Round 113 (Rated for Div. 2)题解
    AtCoder Beginner Contest 182 F
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/9338435.html
Copyright © 2011-2022 走看看