zoukankan      html  css  js  c++  java
  • Codeforces Round #559 (Div. 2)

    打完省赛回来写了总结,有点累,就没想着打这场了 (竟然有wxh出题,wxh天下第一 !)

    题目链接:https://codeforces.com/contest/1159


    A:

    非常弱智的一道题,像单调栈一样处理就完事了。

     1 /* basic header */
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <string>
     6 #include <cstring>
     7 #include <cmath>
     8 #include <cstdint>
     9 #include <climits>
    10 #include <float.h>
    11 /* STL */
    12 #include <vector>
    13 #include <set>
    14 #include <map>
    15 #include <queue>
    16 #include <stack>
    17 #include <algorithm>
    18 #include <array>
    19 #include <iterator>
    20 /* define */
    21 #define ll long long
    22 #define dou double
    23 #define pb emplace_back
    24 #define mp make_pair
    25 #define fir first
    26 #define sec second
    27 #define sot(a,b) sort(a+1,a+1+b)
    28 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    29 #define rep0(i,a,b) for(int i=a;i<b;++i)
    30 #define repa(i,a) for(auto &i:a)
    31 #define eps 1e-8
    32 #define int_inf 0x3f3f3f3f
    33 #define ll_inf 0x7f7f7f7f7f7f7f7f
    34 #define lson curPos<<1
    35 #define rson curPos<<1|1
    36 /* namespace */
    37 using namespace std;
    38 /* header end */
    39 
    40 int n, cnt = 0;
    41 string s;
    42 
    43 int main()
    44 {
    45     cin >> n >> s;
    46     for (auto i : s)
    47         if (i == '+') cnt++;
    48         else if (cnt) cnt--;
    49     if (cnt <= 0) puts("0"); else printf("%d
    ", cnt);
    50     return 0;
    51 }
    View Code

    B:

    题目说什么K-expansion根本不需要看懂,有不等式就够了。

    看似要O(n^2)其实根本不需要,把abs(i-j)移项并拆开之后发现这题其实就是要求最小的a[i]/abs(i-j),显然j是1和n二选一,于是变成a[i]/max(n-i,i-1)。时间复杂度O(n),正确性显然。

     1 /* basic header */
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <string>
     6 #include <cstring>
     7 #include <cmath>
     8 #include <cstdint>
     9 #include <climits>
    10 #include <float.h>
    11 /* STL */
    12 #include <vector>
    13 #include <set>
    14 #include <map>
    15 #include <queue>
    16 #include <stack>
    17 #include <algorithm>
    18 #include <array>
    19 #include <iterator>
    20 /* define */
    21 #define ll long long
    22 #define dou double
    23 #define pb emplace_back
    24 #define mp make_pair
    25 #define fir first
    26 #define sec second
    27 #define sot(a,b) sort(a+1,a+1+b)
    28 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    29 #define rep0(i,a,b) for(int i=a;i<b;++i)
    30 #define repa(i,a) for(auto &i:a)
    31 #define eps 1e-8
    32 #define int_inf 0x3f3f3f3f
    33 #define ll_inf 0x7f7f7f7f7f7f7f7f
    34 #define lson curPos<<1
    35 #define rson curPos<<1|1
    36 /* namespace */
    37 using namespace std;
    38 /* header end */
    39 
    40 const int maxn = 3e5 + 10;
    41 int n, x, ans = int_inf;
    42 
    43 int main()
    44 {
    45     scanf("%d", &n);
    46     rep1(i, 1, n)
    47     {
    48         scanf("%d", &x);
    49         ans = min(ans, x / max(n - i, i - 1));
    50     }
    51     printf("%d
    ", ans);
    52     return 0;
    53 }
    View Code

    C:

    有n个男生和m个女生。对于任意一对男女生,男生有可能送任意多的礼物给女生(也可能不送)。定义a[i][j]为第i个男生送给第j个女生礼物的数量。

    给定n个数,b[i]=min(a[i][1]……a[i][m]);给定m个数,c[i]=max(a[1][i]……a[n][i])。问所有男生最少送了多少礼物,无解输出-1。

    读完题就知道这很显然是个贪心。-1的情况很明显:如果max(b[i])>min(c[i]),不可能存在这种情况,必然无解。

    而且很显然,答案必定是sum(c[i])再加些什么东西上去。为了要ans最小,当然是加上(sum(b[i])-max(b[i]))*m:所有的女生除了收到最多的礼物之外,还收到了剩下(n-1)个男生送出的最少分量的礼物。

    问题来了,如果max(b[i])==min(c[i]),上面的答案不会有问题。如果max(b[i])<min(c[i])呢?ans+=最大b[i]-次大b[i],补上去就完事了。

     1 /* basic header */
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <string>
     6 #include <cstring>
     7 #include <cmath>
     8 #include <cstdint>
     9 #include <climits>
    10 #include <float.h>
    11 /* STL */
    12 #include <vector>
    13 #include <set>
    14 #include <map>
    15 #include <queue>
    16 #include <stack>
    17 #include <algorithm>
    18 #include <array>
    19 #include <iterator>
    20 /* define */
    21 #define ll long long
    22 #define dou double
    23 #define pb emplace_back
    24 #define mp make_pair
    25 #define fir first
    26 #define sec second
    27 #define sot(a,b) sort(a+1,a+1+b)
    28 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    29 #define rep0(i,a,b) for(int i=a;i<b;++i)
    30 #define repa(i,a) for(auto &i:a)
    31 #define eps 1e-8
    32 #define int_inf 0x3f3f3f3f
    33 #define ll_inf 0x7f7f7f7f7f7f7f7f
    34 #define lson curPos<<1
    35 #define rson curPos<<1|1
    36 /* namespace */
    37 using namespace std;
    38 /* header end */
    39 
    40 int n, m;
    41 ll firLar = 0, secLar = 0, ans, minn = ll_inf, sum1 = 0, sum2 = 0;
    42 
    43 int main()
    44 {
    45     scanf("%d%d", &n, &m);
    46     rep1(i, 1, n)
    47     {
    48         ll x; scanf("%lld", &x);
    49         if (firLar <= x)
    50         {
    51             secLar = firLar;
    52             firLar = x;
    53         }
    54         else if (secLar <= x) secLar = x;
    55         sum1 += x;
    56     }
    57     rep1(i, 1, m)
    58     {
    59         ll x; scanf("%d", &x);
    60         minn = min(minn, x);
    61         sum2 += x;
    62     }
    63     if (firLar > minn) return puts("-1"), 0;
    64     ans = sum2 + (sum1 - firLar) * m;
    65     printf("%lld
    ", (firLar < minn) ? ans + firLar - secLar : ans);
    66     return 0;
    67 }
    View Code

    D:

    定义unique string t是在原字符串s里只出现过一次的子串t,这里说的子串要连续。原字符串s只包含0和1两个数字。

    现在题目给定s串和t串的长度,要求构造合法的s串,使得它最短的unique string长度恰好为k。

    非常有趣的一道题目。Description后面谈到的(n mod 2)=(k mod 2),n和k奇偶性相同,仿佛在暗示什么,但我就是猜不出正确做法。感觉肯定有种奇怪的构造方式能符合题意。

    看完题解发现果然如此。由于还没有英文题解,只知其然而不知其所以然(后面的毛子文看不懂……)。

    令a=(n-k)/2,由于题目说了n、k奇偶性相同,易知a必然是一个整数。答案的构造方法是:先输出a个0,再输出一个1,循环a+1遍上述操作。

    不过tutorial下面有神仙说这题根本不难,打表就容易发现构造方法了(problem tags里的brute force强烈暗示打表)。也许对于不同的n只有一种可行解?

    这题的std可怕地短。

     1 /* basic header */
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <string>
     6 #include <cstring>
     7 #include <cmath>
     8 #include <cstdint>
     9 #include <climits>
    10 #include <float.h>
    11 /* STL */
    12 #include <vector>
    13 #include <set>
    14 #include <map>
    15 #include <queue>
    16 #include <stack>
    17 #include <algorithm>
    18 #include <array>
    19 #include <iterator>
    20 /* define */
    21 #define ll long long
    22 #define dou double
    23 #define pb emplace_back
    24 #define mp make_pair
    25 #define fir first
    26 #define sec second
    27 #define sot(a,b) sort(a+1,a+1+b)
    28 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    29 #define rep0(i,a,b) for(int i=a;i<b;++i)
    30 #define repa(i,a) for(auto &i:a)
    31 #define eps 1e-8
    32 #define int_inf 0x3f3f3f3f
    33 #define ll_inf 0x7f7f7f7f7f7f7f7f
    34 #define lson curPos<<1
    35 #define rson curPos<<1|1
    36 /* namespace */
    37 using namespace std;
    38 /* header end */
    39 
    40 int n, k, delta;
    41 
    42 //服了
    43 int main()
    44 {
    45     scanf("%d%d", &n, &k); delta = (n - k) / 2 + 1;
    46     rep1(i, 1, n) printf("%d", i % delta == 0);
    47     puts("");
    48     return 0;
    49 }
    View Code

    E && F:

    神仙题,再见。

  • 相关阅读:
    kingso_sort
    kingso_module
    KINGSO介绍
    kingso
    铁饭碗的含义不是在一个地方永远有饭吃,而是在任何地方都有饭
    立威廉_百度百科
    甜蜜间谍_百度百科
    贝克曼
    报喜鸟集团有限公司_百度百科
    浙江乔治白服饰股份有限公司
  • 原文地址:https://www.cnblogs.com/JHSeng/p/10858577.html
Copyright © 2011-2022 走看看