zoukankan      html  css  js  c++  java
  • 2018 Southern Russia Open Championship

    毛子场,题目有点trick,最后B一眼被我提出解法,队友写锅了,有点可惜。

    题目链接:http://codeforces.com/gym/101790


    A:

    solver:czq

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define pb emplace_back
     6 #define mp make_pair
     7 #define eps 1e-8
     8 #define lson (curpos<<1)
     9 #define rson (curpos<<1|1)
    10 /* namespace */
    11 using namespace std;
    12 /* header end */
    13 
    14 const int MAXN = 1e3 + 10;
    15 int n, a[MAXN], b[MAXN];
    16 int top1 = 0, top2 = 0, p1 = 0, p2 = 0;
    17 struct Node {
    18     int index, delta;
    19     Node() {}
    20     Node(int _idx, int _del): index(_idx), delta(_del) {}
    21 } st1[MAXN], st2[MAXN];
    22 
    23 int main() {
    24     ios::sync_with_stdio(false);
    25     cin.tie(0);
    26     cin >> n;
    27     for (int i = 1; i <= n; i++) cin >> a[i];
    28     for (int i = 1; i <= n; i++) cin >> b[i];
    29     for (int i = 1; i <= n; i++) {
    30         int delta = a[i] - b[i];
    31         if (delta > 0)
    32             st1[top1++] = Node(i, delta);
    33         else
    34             st2[top2++] = Node(i, delta);
    35     }
    36     while (p1 < top1) {
    37         auto curr = st1[p1++];
    38         int index = curr.index, delta = curr.delta;
    39         while (delta) {
    40             auto t = st2[p2];
    41             int tmp = min(delta, -t.delta);
    42             if (tmp) cout << index << " " << t.index << " " << tmp << endl;
    43             delta -= tmp;
    44             st2[p2].delta += tmp;
    45             if (!st2[p2].delta) p2++;
    46         }
    47     }
    48     return 0;
    49 }
    View Code

    B:

    一眼出做法:对凸包求直径,然后直径把凸包分为左右凸包,求左右凸包上面的点的较小值就行。

    唯一坑点就是三点共线。

    C:

    solver:czq

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define pb emplace_back
     6 #define mp make_pair
     7 #define eps 1e-8
     8 #define lson (curpos<<1)
     9 #define rson (curpos<<1|1)
    10 /* namespace */
    11 using namespace std;
    12 /* header end */
    13 
    14 const int MAXN = 1e5 + 10;
    15 int n, k, ans = 0;
    16 int a[MAXN], nextPos[MAXN];
    17 vector<int>pos[MAXN];
    18 set<int>nums, used;
    19 
    20 int main() {
    21     for (int i = 0; i < MAXN; i++) nextPos[i] = -1;
    22 
    23     ios::sync_with_stdio(false);
    24     cin.tie(0);
    25 
    26     cin >> n >> k;
    27     for (int i = 0; i < n; i++) {
    28         cin >> a[i];
    29         pos[a[i]].push_back(i);
    30         nums.insert(a[i]);
    31     }
    32     for (auto num : nums) {
    33         for (int i = (int)pos[num].size() - 2; i >= 0; i--) {
    34             nextPos[pos[num][i]] = pos[num][i + 1];
    35             // cout << nextPos[pos[num][i]] << endl;
    36         }
    37     }
    38     for (int i = 0; i < n; i++) {
    39         if (used.find(i) != used.end()) used.erase(i);
    40         else {
    41             ans++;
    42             if ((int)used.size() >= k) used.erase(*used.rbegin());
    43         }
    44         if (nextPos[i] != -1) {
    45             used.insert(nextPos[i]);
    46             // cout << nextPos[i] << endl;
    47         }
    48     }
    49     cout << ans << endl;
    50     return 0;
    51 }
    View Code

    D:

    solver:czq

    很晚才发现是水题

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define pb emplace_back
     6 #define mp make_pair
     7 #define eps 1e-8
     8 #define lson (curpos<<1)
     9 #define rson (curpos<<1|1)
    10 /* namespace */
    11 using namespace std;
    12 /* header end */
    13 
    14 const int MAXN = 1e5 + 10;
    15 int n, m, days, knowEach[MAXN];
    16 vector<int>g[MAXN];
    17 set<int>canBeKill;
    18 
    19 int main() {
    20     for (int i = 0; i < MAXN; i++) knowEach[i] = 0;
    21     ios::sync_with_stdio(false);
    22     cin.tie(0);
    23 
    24     cin >> n >> m;
    25     for (int i = 1; i <= m; i++) {
    26         int u, v; cin >> u >> v;
    27         g[u].push_back(v);
    28         g[v].push_back(u);
    29     }
    30     cin >> days;
    31     for (int day = 1; day <= days; day++) {
    32         int die; cin >> die;
    33         if (day == 1) {
    34             for (auto people : g[die]) {
    35                 canBeKill.insert(people);
    36                 knowEach[people] = 1;
    37             }
    38         } else {
    39             for (auto people : g[die]) {
    40                 knowEach[people] = 1;
    41             }
    42             if (knowEach[die]) {
    43                 if (canBeKill.find(die) != canBeKill.end()) canBeKill.erase(die);
    44             } else {
    45                 set<int>tmp;
    46                 for (auto people : g[die]) {
    47                     if (canBeKill.find(people) != canBeKill.end()) tmp.insert(people);
    48                 }
    49                 canBeKill = tmp;
    50             }
    51         }
    52         if (canBeKill.size() == 1) {
    53             cout << day << " " << *canBeKill.begin() << endl;
    54             return 0;
    55         }
    56     }
    57     cout << "-1" << endl;
    58     return 0;
    59 }
    View Code

    E:

    solver:zyh、lzh

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int checkStart(int x, int k) {
     4     x %= k;
     5     return x % 2 == 0 ? 1 : 0;
     6 }
     7 int main() {
     8     int n, k;
     9     scanf("%d%d", &n, &k);
    10     if (n == 1) {
    11         printf("1");
    12         return 0;
    13     }
    14     int maxx = max((n + k - 1) / k, 2);
    15     if (maxx == 2 && k % 2 == 0) maxx++;
    16     for (int i = 0; i < n; ++i) {
    17         printf("%d ", (checkStart(i, k) + i / k) % maxx + 1);
    18     }
    19 }
    View Code

    G:

    solver:czq

    K个任务一个周期去思考就非常简单

    1 t, k = map(int, input().split())
    2 # print(t, k)
    3 totalTime = 2 * t + t * (k - 1)
    4 print((totalTime % k != 0) + (totalTime // k))
    View Code

    H:

    solver:zyh

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int T[200001];
     4 set<pair<int, int>> Set[200001];
     5 int s[200001];
     6 int b[200001];
     7 struct query {
     8     int id, val;
     9     query() {}
    10     query(int _id, int _val) {
    11         id = _id;
    12         val = _val;
    13     }
    14     bool operator< (const query &b) const {
    15         return val < b.val;
    16     }
    17 };
    18 query q[200001];
    19 int lowbit(int x) {
    20     return x & (-x);
    21 }
    22 struct tree_array {
    23     int n, st;
    24     int a[200001];
    25     inline void setRange(int N) {
    26         n = N;
    27         st = 1;
    28         while ((st << 1) <= n) st <<= 1;
    29     }
    30     inline void clear() {
    31         memset(a, 0, sizeof(a));
    32     }
    33     inline void add(int pos, int val) {
    34         for (int i = pos; i <= n; i += lowbit(i)) a[i] += val;
    35     }
    36     inline int query(int pos) {
    37         int rnt = 0;
    38         for (int i = pos; i > 0; i -= lowbit(i)) rnt += a[i];
    39         return rnt;
    40     }
    41 };
    42 tree_array tr;
    43 int ans[200001];
    44 int main() {
    45     int n, m, Q;
    46     scanf("%d", &n);
    47     for (int i = 0; i < n; ++i) scanf("%d", &T[i]);
    48 
    49     scanf("%d", &m);
    50     for (int i = 0; i < m; ++i) {
    51         scanf("%d%d", &s[i], &b[i]);
    52     }
    53     s[m] = INT_MAX;
    54     for (int i = 0; i < m; ++i) {
    55         Set[b[i]].insert(make_pair(s[i], s[i + 1] - 1));
    56     }
    57     scanf("%d", &Q);
    58     for (int i = 1; i <= Q; ++i) {
    59         int x;
    60         scanf("%d", &x);
    61         q[i] = query(i, -x);
    62     }
    63     sort(q + 1, q + Q + 1);
    64     tr.setRange(Q);
    65     //for (int i=1;i<=Q;++i) cout<<q[i].val<<" ";
    66     //cout<<endl;
    67     for (int i = 1; i <= n; ++i) {
    68         for (auto seg : Set[i]) {
    69             int l = seg.first - T[i - 1];
    70             int r = seg.second - T[i - 1];
    71             //cout<<"[debug] "<<i<<' '<<l<<" "<<r<<endl;
    72             int l1 = lower_bound(q + 1, q + Q + 1, query(0, l)) - q;
    73             int r1 = upper_bound(q + 1, q + Q + 1, query(0, r)) - q;
    74             if (l1 < r1) {
    75                 if (l1 <= Q && l1 > 0) tr.add(l1, 1);
    76                 if (r1 <= Q && r1 > 0) tr.add(r1, -1);
    77             }
    78         }
    79     }
    80     for (int i = 1; i <= Q; ++i) {
    81         ans[q[i].id] = tr.query(i);
    82     }
    83     for (int i = 1; i <= Q; ++i) printf("%d ", ans[i]);
    84 }
    View Code

    I:

    solver:czq、lzh

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define pb emplace_back
     6 #define mp make_pair
     7 #define eps 1e-8
     8 #define lson (curpos<<1)
     9 #define rson (curpos<<1|1)
    10 /* namespace */
    11 using namespace std;
    12 /* header end */
    13 
    14 const int MAXN = 10;
    15 int n, ans = 0, vis[MAXN], mustPass[MAXN][MAXN], notPass[MAXN][MAXN], path[MAXN];
    16 
    17 int main() {
    18     ios::sync_with_stdio(false);
    19     cin.tie(0);
    20     for (int i = 0; i < MAXN; i++) vis[i] = 0;
    21     notPass[1][3] = notPass[3][1] = notPass[4][6] = notPass[6][4] = notPass[7][9] = notPass[9][7] = 1;
    22     notPass[1][7] = notPass[7][1] = notPass[2][8] = notPass[8][2] = notPass[3][9] = notPass[9][3] = 1;
    23     notPass[1][9] = notPass[9][1] = notPass[3][7] = notPass[7][3] = 1;
    24 
    25     cin >> n;
    26     for (int i = 1; i <= n; i++) {
    27         int u, v; cin >> u >> v;
    28         mustPass[u][v] = mustPass[v][u] = 1;
    29     }
    30 
    31     function<int(int)> checkVaild = [&](int depth) {
    32         int tmp = 0;
    33         // 必须穿过所有合法路径
    34         for (int i = 1; i < depth; i++) {
    35             tmp += mustPass[path[i]][path[i + 1]];
    36         }
    37         if (tmp != n) return 0;
    38         // 不穿过非法路径
    39         for (int i = 1; i < depth; i++) {
    40             if (notPass[path[i]][path[i + 1]]) {
    41                 return 0;
    42             }
    43         }
    44         return 1;
    45     };
    46 
    47     function<void(int)> dfs = [&](int depth) {
    48         if (depth >= 3) ans = ans + checkVaild(depth - 1);
    49         if (depth >= 10) return;
    50         for (int i = 1; i < MAXN; i++) {
    51             if (!vis[i]) {
    52                 vis[i] = 1;
    53                 path[depth] = i;
    54                 dfs(depth + 1);
    55                 vis[i] = 0;
    56             }
    57         }
    58     };
    59 
    60     dfs(1);
    61 
    62     cout << ans << endl;
    63 
    64     return 0;
    65 }
    View Code

    J:

    solver:lzh、zyh

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 struct island {
     5     int num[100010], n, deg[100010], vis[100010];
     6     vector<int> v[100010];
     7     int solve() {
     8         scanf("%d", &n);
     9         for (int i = 1, x, y; i < n; i++) {
    10             scanf("%d%d", &x, &y);
    11             v[x].push_back(y), v[y].push_back(x);
    12             deg[x]++, deg[y]++;
    13         }
    14         queue<int> q;
    15         for (int i = 1; i <= n; i++)
    16             if (deg[i] == 1)
    17                 q.push(i), vis[i]++;
    18         int cur = 0;
    19         while (!q.empty()) {
    20             int num_q = q.size();
    21             while (num_q--) {
    22                 int x = q.front();
    23                 q.pop();
    24                 num[cur]++;
    25                 for (auto i : v[x])
    26                     if (!vis[i]) {
    27                         vis[i]++, q.push(i);
    28                     }
    29             }
    30             cur++;
    31         }
    32         return cur - 1;
    33     }
    34 } l, r;
    35 
    36 int main() {
    37     int maxx = max(l.solve(), r.solve());
    38     long long ans = 0;
    39     int suml = l.n - l.num[0], sumr = r.n - r.num[0];
    40 
    41     for (int i = 1; i <= maxx; i++) {
    42         ans += 1ll * suml * sumr;
    43         suml -= l.num[i], sumr -= r.num[i];
    44 
    45         //printf("%.12lf
    ", ans);
    46     }
    47     printf("%.12lf
    ", 1.0 * ans / l.n / r.n);
    48 }
    View Code

    L:

    solver:lzh

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main() {
     4     int n, a, b;
     5     cin >> n >> a >> b;
     6     n *= 60;
     7     int ans = 0;
     8     if (a > b)
     9         ans = (n - b) / a;
    10     else
    11         ans = (n - a) / b;
    12     ans = max(ans, 0);
    13     cout << ans << endl;
    14 }
    View Code
  • 相关阅读:
    Jmeter接口测试时传递json格式的数据
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element 定位frame中的元素
    selenium报错“selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.”的解决方案
    python+selenium如何定位页面的元素,有几种定位元素的方法?
    c#中的表达式
    占位符的使用
    数据类型(变量的声明与赋值)
    Hello World 老调重谈
    易语言转C#小试牛刀
    开博了
  • 原文地址:https://www.cnblogs.com/JHSeng/p/12686674.html
Copyright © 2011-2022 走看看