zoukankan      html  css  js  c++  java
  • Codeforces #614 div.2 (AE)

    A  ConneR and the A.R.C. Markland-N

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define inc(i, l, r) for (int i = l; i <= r; i++)
     5 
     6 int t, n, s, k, x;
     7 
     8 int main() {
     9     cin >> t;
    10     while (t--) {
    11         cin >> n >> s >> k;
    12         map<int, int> m;
    13         inc(i, 1, k) {
    14             cin >> x;
    15             m[x] = 1;
    16         }
    17         inc(del, 0, k) {
    18             if ((s + del <= n && m[s + del] == 0) ||
    19                 (s - del >= 1 && m[s - del] == 0)) {
    20                 cout << del << "\n";
    21                 break;
    22             }
    23         }
    24     }
    25 }
    View Code

     

    B  JOE is on TV!

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define inc(i, l, r) for (int i = l; i <= r; i++)
     5 
     6 int n;
     7 double r;
     8 
     9 int main() {
    10     cin >> n;
    11     for (int i = n; i >= 1; i--) r += 1.0 / i;
    12     printf("%.12f", r);
    13 }
    View Code

     

    C  NEKO's Maze Game

    每个岩浆点的对面或斜对面如果也有岩浆点,那么这两点之间就会形成障碍,统计这种障碍的数量

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define inc(i, l, r) for (int i = l; i <= r; i++)
     5 
     6 const int maxn = 1e6 + 5;
     7 
     8 int a[3][maxn];
     9 int n, q, k, x, y;
    10 
    11 int main() {
    12     cin >> n >> q;
    13     inc(i, 0, q - 1) {
    14         cin >> x >> y;
    15         x--;
    16         if (a[x][y] == 0) {
    17             a[x][y] = 1;
    18             inc(del, -1, 1) if (a[1 - x][y + del] == 1) k++;
    19         } else {
    20             a[x][y] = 0;
    21             inc(del, -1, 1) if (a[1 - x][y + del] == 1) k--;
    22         }
    23         if(k) puts("NO");
    24         else puts("YES");
    25     }
    26 }
    View Code

     

    D  Aroma's Search

    分析点集的特点,可以知道每一个数据点都在下标比它小的数据点的右上方,而且离下一个数据点的距离 大于 离第0个数据点的距离。

    枚举Aroma从哪个点出发;先往第0个数据点走,然后尽可能往右上走

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define inc(i, l, r) for (int i = l; i <= r; i++)
     5 
     6 const int maxn = 1e6 + 5;
     7 
     8 ll a0, b0, ax, bx, ay, by;
     9 ll xs, ys, t;
    10 
    11 ll dx[maxn], dy[maxn];
    12 ll dis[maxn];
    13 
    14 int res;
    15 
    16 int main() {
    17     cin >> a0 >> b0 >> ax >> ay >> bx >> by;
    18     cin >> xs >> ys >> t;
    19     ll tx = a0, ty = b0;
    20     int top;
    21     for (top = 0; tx <= 2e16 && ty <= 2e16; top++) {
    22         dx[top] = tx, dy[top] = ty;
    23         tx = tx * ax + bx, ty = ty * ay + by;
    24     }
    25     inc(i, 1, top - 1) dis[i] = dx[i] - dx[0] + dy[i] - dy[0];
    26     inc(i, 0, top - 1) {
    27         ll tmp = t - abs(xs - dx[i]) - abs(ys - dy[i]);
    28         if (tmp < 0) continue;
    29         int tot = 0;
    30         if (tmp <= dis[i]) {
    31             tot = i - (lower_bound(dis, dis + top, dis[i] - tmp) - dis) + 1;
    32         } else {
    33             tot = upper_bound(dis + i + 1, dis + top, tmp - dis[i]) - dis;
    34         }
    35         res = max(res, tot);
    36     }
    37     cout << res;
    38 }
    View Code

     

    E  Xenon's Attack on the Gangs

    最大S的方案必然是0-L都在一条链上,这条链上的数字是“山谷”型

    推出状态转移方程 

    dp[u][v] = sub[u][v] * sub[v][u] + max(solve(par[v][u], v), solve(par[u][v], u));
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define inc(i, l, r) for (int i = l; i <= r; i++)
     5 #define pb push_back
     6 
     7 const int maxn = 3e3 + 5;
     8 vector<int> edge[maxn];
     9 int n, u, v;
    10 int sub[maxn][maxn], par[maxn][maxn];
    11 ll dp[maxn][maxn], res;
    12 
    13 int root;
    14 
    15 int dfs(int x, int p) {
    16     sub[root][x] = 1;
    17     for (int i = 0; i < edge[x].size(); i++) {
    18         if (edge[x][i] != p) {
    19             par[root][edge[x][i]] = x;
    20             sub[root][x] += dfs(edge[x][i], x);
    21         }
    22     }
    23     return sub[root][x];
    24 }
    25 
    26 ll solve(int u, int v) {
    27     if (u == v) return 0;
    28     if (dp[u][v]) return dp[u][v];
    29     return dp[u][v] = sub[u][v] * sub[v][u] +
    30                       max(solve(par[v][u], v), solve(par[u][v], u));
    31 }
    32 
    33 int main() {
    34     cin >> n;
    35     inc(i, 1, n - 1) {
    36         cin >> u >> v;
    37         edge[u].pb(v);
    38         edge[v].pb(u);
    39     }
    40     inc(i, 1, n) {
    41         root = i;
    42         dfs(root, -1);
    43     }
    44     inc(i, 1, n) inc(j, 1, n) {
    45         res = max(res, solve(i, j));
    46     }
    47     printf("%lld\n", res);
    48 }
    View Code

     

  • 相关阅读:
    Swift ARC 自动引用计数
    Swift 值类型和引用类型的内存管理
    Swift 栈和堆
    Swift 命令行输入输出
    在 OC 中调用 Swift 代码
    在 Swift 中调用 OC 代码
    Swift 类型桥接
    Swift 与 C 语言混合编程
    Swift Precondition 预处理
    Swift Assert 断言
  • 原文地址:https://www.cnblogs.com/linqi05/p/12217114.html
Copyright © 2011-2022 走看看