• codeforces #585 div2 ABCD


    A. Yellow Cards

    Description

     Solution

    最小值:先给每个人k-1张黄牌,剩下再判断。

    最大值:先给k值最小的安排满,再考虑k小的组。

    B. The Number of Products

    Description

    给出一个长为n的序列a。

    求所有的字串$a[l,r]$满足$a[l] imes a[l+1] imes ... imes a[r] lt 0, l le r$

    求所有的字串$a[l,r]$满足$a[l] imes a[l+1] imes ... imes a[r] lt 0, l le r$

    Solution

    设$dp1[i]$表示以$a[i]$结尾的字串个数满足条件1

    同样,设dp2满足条件2。

    转移方程

    $$a[i] gt 0 ightarrow dp1[i]=dp1[i-1]+1,dp2[i]=dp2[i-1]$$

    $$a[i] lt 0 ightarrow dp1[i]=dp1[i-1],dp2[i]=dp2[i-1]+1$$

    $$a[i] = 0 ightarrow dp1[i]=dp2[i]=0$$

      1 #include <algorithm>
      2 #include <cctype>
      3 #include <cmath>
      4 #include <cstdio>
      5 #include <cstdlib>
      6 #include <cstring>
      7 #include <iostream>
      8 #include <map>
      9 #include <numeric>
     10 #include <queue>
     11 #include <set>
     12 #include <stack>
     13 #if __cplusplus >= 201103L
     14 #include <unordered_map>
     15 #include <unordered_set>
     16 #endif
     17 #include <vector>
     18 #define lson rt << 1, l, mid
     19 #define rson rt << 1 | 1, mid + 1, r
     20 #define LONG_LONG_MAX 9223372036854775807LL
     21 #define pblank putchar(' ')
     22 #define ll LL
     23 #define fastIO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
     24 using namespace std;
     25 typedef long long ll;
     26 typedef long double ld;
     27 typedef unsigned long long ull;
     28 typedef pair<int, int> P;
     29 int n, m, k;
     30 const int maxn = 2e5 + 10;
     31 template <class T>
     32 inline T read()
     33 {
     34     int f = 1;
     35     T ret = 0;
     36     char ch = getchar();
     37     while (!isdigit(ch))
     38     {
     39         if (ch == '-')
     40             f = -1;
     41         ch = getchar();
     42     }
     43     while (isdigit(ch))
     44     {
     45         ret = (ret << 1) + (ret << 3) + ch - '0';
     46         ch = getchar();
     47     }
     48     ret *= f;
     49     return ret;
     50 }
     51 template <class T>
     52 inline void write(T n)
     53 {
     54     if (n < 0)
     55     {
     56         putchar('-');
     57         n = -n;
     58     }
     59     if (n >= 10)
     60     {
     61         write(n / 10);
     62     }
     63     putchar(n % 10 + '0');
     64 }
     65 template <class T>
     66 inline void writeln(const T &n)
     67 {
     68     write(n);
     69     puts("");
     70 }
     71 template <typename T>
     72 void _write(const T &t)
     73 {
     74     write(t);
     75 }
     76 template <typename T, typename... Args>
     77 void _write(const T &t, Args... args)
     78 {
     79     write(t), pblank;
     80     _write(args...);
     81 }
     82 template <typename T, typename... Args>
     83 inline void write_line(const T &t, const Args &... data)
     84 {
     85     _write(t, data...);
     86 }
     87 int dp1[maxn], dp2[maxn], a[maxn];
     88 int main(int argc, char const *argv[])
     89 {
     90 #ifndef ONLINE_JUDGE
     91     freopen("in.txt", "r", stdin);
     92     // freopen("out.txt", "w", stdout);
     93 #endif
     94     n = read<int>();
     95     for (int i = 1; i <= n; i++)
     96         a[i] = read<int>();
     97 
     98     for (int i = 1; i <= n; i++)
     99     {
    100         if (a[i] > 0)
    101         {
    102             dp1[i] = dp1[i - 1] + 1;
    103             dp2[i] = dp2[i - 1];
    104         }
    105         else if (a[i] < 0)
    106         {
    107             dp2[i] = dp1[i - 1] + 1;
    108             dp1[i] = dp2[i - 1];
    109         }
    110         else
    111             dp1[i] = dp2[i] = 0;
    112     }
    113     ll res1 = accumulate(dp1 + 1, dp1 + 1 + n, 0LL), res2 = accumulate(dp2 + 1, dp2 + 1 + n, 0LL);
    114     write_line(res2, res1);
    115     return 0;
    116 }
    View Code

    C. Swap Letters

    Description

    给出两个仅含a,b的字符串s,t。每次可以选择i,j使得$swap(s[i],t[j])$

    问能否使s=t,如果可以输出最小的次数及对应交换方案。否则输出-1

    Solution

    有点像最近的一道B2,如果之前做过这一场那道B2肯定能出。

    考虑s=aa,t=bb,那么直接交换s[1],t[2]即可,这种情况只需要一次。

    s=ab,t=ba,先swap[s[1],t[1]),再swap(s[1],t[2])。需要两次交换。

      1 #include <algorithm>
      2 #include <cctype>
      3 #include <cmath>
      4 #include <cstdio>
      5 #include <cstdlib>
      6 #include <cstring>
      7 #include <iostream>
      8 #include <map>
      9 #include <numeric>
     10 #include <queue>
     11 #include <set>
     12 #include <stack>
     13 #if __cplusplus >= 201103L
     14 #include <unordered_map>
     15 #include <unordered_set>
     16 #endif
     17 #include <vector>
     18 #define lson rt << 1, l, mid
     19 #define rson rt << 1 | 1, mid + 1, r
     20 #define LONG_LONG_MAX 9223372036854775807LL
     21 #define pblank putchar(' ')
     22 #define ll LL
     23 #define fastIO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
     24 using namespace std;
     25 typedef long long ll;
     26 typedef long double ld;
     27 typedef unsigned long long ull;
     28 typedef pair<int, int> P;
     29 int n, m, k;
     30 const int maxn = 2e5 + 10;
     31 template <class T>
     32 inline T read()
     33 {
     34     int f = 1;
     35     T ret = 0;
     36     char ch = getchar();
     37     while (!isdigit(ch))
     38     {
     39         if (ch == '-')
     40             f = -1;
     41         ch = getchar();
     42     }
     43     while (isdigit(ch))
     44     {
     45         ret = (ret << 1) + (ret << 3) + ch - '0';
     46         ch = getchar();
     47     }
     48     ret *= f;
     49     return ret;
     50 }
     51 template <class T>
     52 inline void write(T n)
     53 {
     54     if (n < 0)
     55     {
     56         putchar('-');
     57         n = -n;
     58     }
     59     if (n >= 10)
     60     {
     61         write(n / 10);
     62     }
     63     putchar(n % 10 + '0');
     64 }
     65 template <class T>
     66 inline void writeln(const T &n)
     67 {
     68     write(n);
     69     puts("");
     70 }
     71 template <typename T>
     72 void _write(const T &t)
     73 {
     74     write(t);
     75 }
     76 template <typename T, typename... Args>
     77 void _write(const T &t, Args... args)
     78 {
     79     write(t), pblank;
     80     _write(args...);
     81 }
     82 template <typename T, typename... Args>
     83 inline void write_line(const T &t, const Args &... data)
     84 {
     85     _write(t, data...);
     86 }
     87 char s[maxn], t[maxn];
     88 set<int> pos, a, b;
     89 vector<P> r;
     90 int main(int argc, char const *argv[])
     91 {
     92 #ifndef ONLINE_JUDGE
     93     freopen("in.txt", "r", stdin);
     94     // freopen("out.txt", "w", stdout);
     95 #endif
     96     fastIO;
     97     cin >> n;
     98     cin >> s >> t;
     99     int aa = 0, bb = 0;
    100     for (int i = 0; i < n; i++)
    101     {
    102         if (s[i] == 'a')
    103             ++aa;
    104         else
    105             ++bb;
    106         if (t[i] == 'a')
    107             ++aa;
    108         else
    109             ++bb;
    110         if (s[i] != t[i])
    111         {
    112             if (s[i] == 'a')
    113                 a.emplace(i);
    114             else
    115                 b.emplace(i);
    116         }
    117     }
    118     if ((aa & 1) || (bb & 1))
    119     {
    120         puts("-1");
    121         return 0;
    122     }
    123     while (a.size() > 1)
    124     {
    125         int t1 = *a.begin();
    126         a.erase(t1);
    127         int t2 = *a.begin();
    128         a.erase(t2);
    129         r.emplace_back(t1, t2);
    130         swap(s[t1], t[t2]);
    131     }
    132     while (b.size() > 1)
    133     {
    134         int t1 = *b.begin();
    135         b.erase(t1);
    136         int t2 = *b.begin();
    137         b.erase(t2);
    138         r.emplace_back(t1, t2);
    139         swap(s[t1], t[t2]);
    140     }
    141     if (a.size() != b.size())
    142     {
    143         puts("-1");
    144         return 0;
    145     }
    146     if (a.size())
    147     {
    148         int t1 = *a.begin(), t2 = *b.begin();
    149         r.emplace_back(t1, t1);
    150         r.emplace_back(t2, t1);
    151     }
    152     cout << r.size() << "
    ";
    153     for (auto x : r)
    154         cout << x.first + 1 << " " << x.second + 1 << "
    ";
    155     return 0;
    156 }
    View Code

    D. Ticket Game

    Description

    给出一个长度为偶数n的字符序列。包含数字和?。

    A喜欢前一半的数字和不等于后一半数字之和。

    B恰恰相反。

    A,B轮流选择一个?变成一个数字,问最终谁能得到这一串序列。

    Solution

    没想到解法,补的题。

    计算前一半和pre,后一半和last。

    前一半?数目l,后一半?数目r。

    pre=last&&l=r肯定B赢。

    pre=last&&l!=r肯定A赢。

    pre!=last的情况,假设pre<last。

    如果l<=r那么A一定赢。

    l>r时,前r次游戏中,A一定尽可能拉大last的值将后半部分r变为9,而B只能紧跟差距也使前面的r个问号变为9。

    那么剩下(l-r)/2次操作,如果(l-r)/2=last-pre,不论A怎么放x,B总能找到一个数字y使得x+y=9,从而使最终pre=last。

      1 #include <algorithm>
      2 #include <cctype>
      3 #include <cmath>
      4 #include <cstdio>
      5 #include <cstdlib>
      6 #include <cstring>
      7 #include <iostream>
      8 #include <map>
      9 #include <numeric>
     10 #include <queue>
     11 #include <set>
     12 #include <stack>
     13 #if __cplusplus >= 201103L
     14 #include <unordered_map>
     15 #include <unordered_set>
     16 #endif
     17 #include <vector>
     18 #define lson rt << 1, l, mid
     19 #define rson rt << 1 | 1, mid + 1, r
     20 #define LONG_LONG_MAX 9223372036854775807LL
     21 #define pblank putchar(' ')
     22 #define ll LL
     23 #define fastIO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
     24 using namespace std;
     25 typedef long long ll;
     26 typedef long double ld;
     27 typedef unsigned long long ull;
     28 typedef pair<int, int> P;
     29 int n, m, k;
     30 const int maxn = 2e5 + 10;
     31 template <class T>
     32 inline T read()
     33 {
     34     int f = 1;
     35     T ret = 0;
     36     char ch = getchar();
     37     while (!isdigit(ch))
     38     {
     39         if (ch == '-')
     40             f = -1;
     41         ch = getchar();
     42     }
     43     while (isdigit(ch))
     44     {
     45         ret = (ret << 1) + (ret << 3) + ch - '0';
     46         ch = getchar();
     47     }
     48     ret *= f;
     49     return ret;
     50 }
     51 template <class T>
     52 inline void write(T n)
     53 {
     54     if (n < 0)
     55     {
     56         putchar('-');
     57         n = -n;
     58     }
     59     if (n >= 10)
     60     {
     61         write(n / 10);
     62     }
     63     putchar(n % 10 + '0');
     64 }
     65 template <class T>
     66 inline void writeln(const T &n)
     67 {
     68     write(n);
     69     puts("");
     70 }
     71 template <typename T>
     72 void _write(const T &t)
     73 {
     74     write(t);
     75 }
     76 template <typename T, typename... Args>
     77 void _write(const T &t, Args... args)
     78 {
     79     write(t), pblank;
     80     _write(args...);
     81 }
     82 template <typename T, typename... Args>
     83 inline void write_line(const T &t, const Args &... data)
     84 {
     85     _write(t, data...);
     86 }
     87 char s[maxn];
     88 int pre, last;
     89 int r, l;
     90 int main(int argc, char const *argv[])
     91 {
     92 #ifndef ONLINE_JUDGE
     93     freopen("in.txt", "r", stdin);
     94     // freopen("out.txt", "w", stdout);
     95 #endif
     96     fastIO;
     97     cin >> n;
     98     cin >> s + 1;
     99     for (int i = 1; i <= n / 2; i++)
    100         if (s[i] == '?')
    101             ++l;
    102         else
    103             pre += s[i] - '0';
    104     for (int i = n / 2 + 1; i <= n; i++)
    105         if (s[i] == '?')
    106             ++r;
    107         else
    108             last += s[i] - '0';
    109 
    110     if (pre == last)
    111     {
    112         if (l == r)
    113             cout << "Bicarp
    ";
    114         else
    115             cout << "Monocarp
    ";
    116         return 0;
    117     }
    118     else
    119     {
    120         if (pre > last)
    121             swap(pre, last), swap(l, r);
    122         if (l <= r)
    123             cout << "Monocarp
    ";
    124         else
    125         {
    126             int left = last - pre;
    127             l -= r;
    128             l /= 2;
    129             if (l * 9 == left)
    130                 cout << "Bicarp
    ";
    131             else
    132                 cout << "Monocarp
    ";
    133         }
    134     }
    135     return 0;
    136 }
    View Code
  • 相关阅读:
    How To Scan QRCode For UWP (4)
    How To Crop Bitmap For UWP
    How To Scan QRCode For UWP (3)
    How To Scan QRCode For UWP (2)
    How To Scan QRCode For UWP (1)
    How to change windows applicatioin's position via Win32 API
    8 Ways to Become a Better Coder
    How to resize or create a thumbnail image from file stream on UWP
    C# winform压缩文件夹带进度条
    MS ACCESS MID函数
  • 原文地址:https://www.cnblogs.com/mooleetzi/p/11827362.html
Copyright © 2020-2023  润新知