• [弱校联萌2016]2016弱校联盟十一专场10.2


    比赛链接:https://www.bnuoj.com/v3/contest_show.php?cid=8520

    A.无非两种情况,点在体里和点在体外。在体外分三种情况,分别是到顶点的距离最小、到棱的距离最小、到面的距离最小。坑在long long于是悲催了一发。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 typedef long long LL;
     5 LL x[5], y[5], z[5];
     6 
     7 LL dis(LL x1, LL y1, LL z1, LL x2, LL y2, LL z2) {
     8   LL a = x1 - x2, b = y1 - y2, c = z1 - z2;
     9   return a * a +  b * b + c * c;
    10 }
    11 
    12 LL d(LL x1, LL y1, LL x2, LL y2) {
    13   LL a = x1 - x2, b = y1 - y2;
    14   return a * a + b * b;
    15 }
    16 
    17 int main() {
    18   //freopen("in", "r", stdin);
    19   while(~scanf("%lld%lld%lld",&x[0],&y[0],&z[0])) {
    20     for(LL i = 1; i <= 2; i++) scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
    21     if(x[1]<=x[0]&&x[0]<=x[2]&&y[1]<=y[0]&&y[0]<=y[2]&&z[1]<=z[0]&&z[0]<=z[2]) { puts("0"); continue; }
    22     LL ret = 100000000000LL;
    23     for(LL i = 1; i <= 2; i++) {
    24       for(LL j = 1; j <= 2; j++) {
    25         for(LL k = 1; k <= 2; k++) {
    26           ret = min(ret, dis(x[0],y[0],z[0],x[i],y[j],z[k]));
    27         }
    28       }
    29     }
    30     if(x[1]<=x[0]&&x[0]<=x[2]&&!(y[1]<=y[0]&&y[0]<=y[2]&&z[1]<=z[0]&&z[0]<=z[2])) {
    31       ret = min(ret, d(y[0],z[0],y[1],z[1]));
    32       ret = min(ret, d(y[0],z[0],y[2],z[2]));
    33       ret = min(ret, d(y[0],z[0],y[1],z[2]));
    34       ret = min(ret, d(y[0],z[0],y[2],z[1]));
    35     }
    36     if(y[1]<=y[0]&&y[0]<=y[2]&&!(x[1]<=x[0]&&x[0]<=x[2]&&z[1]<=z[0]&&z[0]<=z[2])) {
    37       ret = min(ret, d(x[0],z[0],x[1],z[1]));
    38       ret = min(ret, d(x[0],z[0],x[2],z[2]));
    39       ret = min(ret, d(x[0],z[0],x[1],z[2]));
    40       ret = min(ret, d(x[0],z[0],x[2],z[1]));
    41     }
    42     if(z[1]<=z[0]&&z[0]<=z[2]&&!(y[1]<=y[0]&&y[0]<=y[2]&&x[1]<=x[0]&&x[0]<=x[2])) {
    43       ret = min(ret, d(x[0],y[0],x[1],y[1]));
    44       ret = min(ret, d(x[0],y[0],x[2],y[2]));
    45       ret = min(ret, d(x[0],y[0],x[2],y[1]));
    46       ret = min(ret, d(x[0],y[0],x[1],y[2]));
    47     }
    48 
    49     if(y[1]<=y[0]&&y[0]<=y[2]&&z[1]<=z[0]&&z[0]<=z[2]&&!(x[1]<=x[0]&&x[0]<=x[2])) {
    50       ret = min(ret, (x[0]-x[1])*(x[0]-x[1]));
    51       ret = min(ret, (x[0]-x[2])*(x[0]-x[2]));
    52     }
    53     if(x[1]<=x[0]&&x[0]<=x[2]&&z[1]<=z[0]&&z[0]<=z[2]&&!(y[1]<=y[0]&&y[0]<=y[2])) {
    54       ret = min(ret, (y[0]-y[1])*(y[0]-y[1]));
    55       ret = min(ret, (y[0]-y[2])*(y[0]-y[2]));
    56     }
    57     if(y[1]<=y[0]&&y[0]<=y[2]&&x[1]<=x[0]&&x[0]<=x[2]&&!(z[1]<=z[0]&&z[0]<=z[2])) {
    58       ret = min(ret, (z[0]-z[1])*(z[0]-z[1]));
    59       ret = min(ret, (z[0]-z[2])*(z[0]-z[2]));
    60     }
    61     printf("%lld
    ", ret);
    62   }
    63   return 0;
    64 }
    A

    E.分类讨论,容易漏情况。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 LL a, b, c, ret;
     5 
     6 int main() {
     7     // freopen("in", "r", stdin);
     8     while(~scanf("%lld%lld%lld",&a,&b,&c)) {
     9         if(a >= 2) ret = a + 2 * b + 3 * c;
    10         else if(a == 1) {
    11             if(b) ret = a + 2 * b + 3 * c;
    12             else ret = 2 * c + 1;
    13         }
    14         else {
    15             if(b == 1) ret = 2 * c + 1;
    16             else if(b > 1) {
    17                 if(c) ret = 2 * b + 3 * c - 2;
    18                 else ret = b;
    19             }
    20             else ret = c;
    21         }
    22         printf("%lld
    ",ret);
    23     }
    24 }
    E

    F.写挂了,待补。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 typedef pair<int,int> pii;
     5 const int maxn = 100100;
     6 const int inf = 90000000;
     7 int n, m, q;
     8 int u, v;
     9 map<pii,bool> vis;
    10 map<pii,int> dis;
    11 vector<int> G[maxn];
    12 
    13 void bfs(int s, int t) {
    14   queue<int> q;
    15   int u, v;
    16   q.push(s); dis[pii(s,s)] = 0; vis[pii(s,s)] = 1;
    17   while(!q.empty()) {
    18     u = q.front(); q.pop();
    19     if(u == t) return;
    20     for(int i = 0; i < G[u].size(); i++) {
    21       v = G[u][i];
    22       dis[pii(u,v)] = dis[pii(v,u)] = 1;
    23       vis[pii(u,v)] = vis[pii(v,u)] = 1;
    24       if(dis.find(pii(s,t)) == dis.end()) {
    25 
    26         dis[pii(s,v)] = dis[pii(s,u)] + 1;
    27         dis[pii(v,s)] = dis[pii(u,s)] + 1;
    28         vis[pii(s,v)] = vis[pii(v,s)] = 1;
    29         q.push(v);
    30       }
    31     }
    32   }
    33 }
    34 
    35 int main() {
    36   freopen("in", "r", stdin);
    37   while(~scanf("%d%d%d",&n,&m,&q)) {
    38     vis.clear(); dis.clear();
    39     for(int i = 1; i <= n; i++) G[i].clear();
    40     for(int i = 0; i < m; i++) {
    41       scanf("%d%d",&u,&v);
    42       if(vis.find(pii(u,v)) == vis.end()) {
    43         vis[pii(u,v)] = 1;
    44         vis[pii(v,u)] = 1;
    45         G[u].push_back(v);
    46         G[v].push_back(u);
    47       }
    48     }
    49     vis.clear();
    50     int x, y;
    51     for(int i = 0; i < q; i++) {
    52       scanf("%d%d",&x,&y);
    53       if(x == y) puts("0");
    54       else {
    55         if(vis.find(pii(x,y)) != vis.end()) {
    56           printf("%d
    ", dis[pii(x,y)]);
    57         }
    58         else {
    59           bfs(x, y);
    60           printf("%d
    ", dis[pii(x,y)]);
    61         }
    62       }
    63     }
    64   }
    65   return 0;
    66 }
    F
  • 相关阅读:
    Java中顺序、并行与并发
    Java设计模式之Iterator
    渗透基础流程思路丶技巧丶与总结
    阿里巴巴Java开发手册之并发处理注意事项
    Java中Thread方法启动线程
    IOCP之客户端及消息传递
    IOCP简单实现
    JAVA 递归线程池测试 ExecutorService / ForkJoinPool
    TCP与UDP的一些心得
    七.badboy检查点和参数化
  • 原文地址:https://www.cnblogs.com/kirai/p/5927818.html
Copyright © 2020-2023  润新知