• codeforces #598 div3 ABCDF


    A. Payment Without Change

    Description

    给出a个价值为n的硬币和b个价值为1的硬币,问凑出来s元钱。

    Solution

    $lfloor frac{s}{n} floor imes n + b geq s$

    我还憨憨写了个二分。结果只是因为爆int。

      1 #include <algorithm>
      2 #include <numeric>
      3 #include <cctype>
      4 #include <cmath>
      5 #include <cstdio>
      6 #include <cstdlib>
      7 #include <cstring>
      8 #include <iostream>
      9 #include <map>
     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 = 1e5 + 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 main(int argc, char const *argv[])
     88 {
     89 #ifndef ONLINE_JUDGE
     90     freopen("in.txt","r", stdin);
     91     // freopen("out.txt","w", stdout);
     92 #endif
     93     int t = read<int>();
     94     while(t--){
     95         ll a = read<int>(), b = read<int>(), n = read<int>(), s = read<int>();
     96         ll l = 0, r = a;
     97         ll res = -1;
     98         while(l<=r){
     99             ll mid = l + r>>1;
    100             if (mid*n>s)
    101                 res = mid, r = mid - 1;
    102             else
    103                 l = mid + 1;
    104         }
    105         if (res==-1){
    106             if (a*n+b>=s)
    107                 puts("YES");
    108             else
    109                 puts("NO");
    110         }
    111         else{
    112             if ((res-1)*n+b>=s)
    113                 puts("YES");
    114             else
    115                 puts("NO");
    116         }
    117     }
    118     return 0;
    119 }
    View Code

    B. Minimize the Permutation

    Description

    给出一个长为n的序列,一共可以进行n-1个操作,操作$i$可以将序列$a[j],a[j+1]$交换。

    求交换后字典序最小的序列。

    Solution

    卡了很久这个,想想真的憨,后来发现是忘了更新pos值。

    每次将最小的值移到尽可能的前面,记录操作了哪些步骤,判断满足大小关系或者当前步骤已经操作过则break

      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 = 1e5 + 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 a[maxn], pos[maxn],vis[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     int t = read<int>();
     95     while (t--)
     96     {
     97         n = read<int>();
     98         for (int i = 1; i <= n; i++)
     99         {
    100             a[i] = read<int>();
    101             pos[a[i]] = i;
    102             vis[i] = 0;
    103         }
    104         int left = n - 1;
    105         pos[0] = 0;
    106         for (int i = 1; i <n && left; i++)
    107         {
    108             for (int j = pos[i]-1; j >=1;j--){
    109                 if (a[j]<a[j+1]||vis[j])
    110                     break;
    111                 --left;
    112                 swap(a[j], a[j+1]);
    113                 swap(pos[a[j]], pos[a[j+1]]);
    114                 vis[j] = 1;
    115             }
    116         }
    117         for (int i = 1; i <= n; i++)
    118             write(a[i]), pblank;
    119         puts("");
    120     }
    121     return 0;
    122 }
    View Code

    C. Platforms Jumping

    Description

    给出长为n的一条河,以及m个不同长度木板。

    小明每次最多可以跳p个单位长度。

    问如何安排木板能使小明从0位置安全跳到n+1。

    要求木板的交换顺序。

    Solution

    能否安全跳到最右边很好判定,不过如何安排木板就憨了。

    先说一句dyznb。

    首先考虑m块木板的总长度为sum,left为n-sum。

    即left为小明需要跳跃的距离。

    m块木板,加上0和n+1两个点。

    一共有m+1个间隙,每个间隙平均分配$left/m$

    如果有余数则将前面的部分加一个空隙。

    注意判断边界。

      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 = 1e5 + 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 a[maxn], vis[maxn];
     88 int st[maxn];
     89 int main(int argc, char const *argv[])
     90 {
     91 #ifndef ONLINE_JUDGE
     92     freopen("in.txt", "r", stdin);
     93     // freopen("out.txt","w", stdout);
     94 #endif
     95     n = read<int>(), m = read<int>(), k = read<int>();
     96     int sum = 0;
     97     for (int i = 1; i <= m; i++)
     98         a[i] = read<int>(), sum += a[i];
     99     int left = n - sum;
    100     int mod = left % (m + 1);
    101     int div = left / (m + 1);
    102     int pdiv = div;
    103     if (mod)
    104         ++pdiv;
    105     if (pdiv >=k||(k==1&&left))
    106         puts("NO");
    107     else
    108     {
    109         if (left <=m + 1)
    110         {
    111 
    112             int mod = left;
    113             int now = 1;
    114             for (int i = 1; i <= n;i++){
    115                 if (mod){
    116                     ++i;
    117                     --mod;
    118                 }
    119                 for (int j = i, p = 0; p < a[now]; j++, p++)
    120                     vis[j] = now;
    121                 i += a[now] - 1;
    122                 ++now;
    123             }
    124         }
    125         else
    126         {
    127             int div = left / (m + 1);
    128             int mod = left % (m + 1);
    129             int now = 1;
    130             for (int i = 1; i <= n;i++)
    131             {
    132                 if (mod)
    133                 {
    134                     ++i;
    135                     --mod;
    136                 }
    137                 i += div;
    138                 for (int j = i, p = 0; p < a[now]; j++, p++)
    139                     vis[j] = now;
    140                 i += a[now] - 1;
    141                 ++now;
    142             }
    143         }
    144         puts("YES");
    145         for (int i = 1; i <= n; i++)
    146             write(vis[i]), pblank;
    147         puts("");
    148     }
    149     return 0;
    150 }
    View Code

    D. Binary String Minimizing

    Description

    给出一个只包含01的字符串,可以进行k次操作。

    每次操作可以将任意相邻两个值交换。

    问最小的字典序。

    Solution

    讲道理这个题比BC简单好吧。

    直接贪心,将0移到可能移到的最前面。

      1 #include <algorithm>
      2 #include <numeric>
      3 #include <cctype>
      4 #include <cmath>
      5 #include <cstdio>
      6 #include <cstdlib>
      7 #include <cstring>
      8 #include <iostream>
      9 #include <map>
     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 ll n, m, k;
     30 const int maxn = 1e6 + 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 lftz[maxn],lfto[maxn];
     89 int main(int argc, char const *argv[])
     90 {
     91 #ifndef ONLINE_JUDGE
     92     freopen("in.txt","r", stdin);
     93     // freopen("out.txt","w", stdout);
     94 #endif
     95     fastIO;
     96     int t;
     97     cin >> t;
     98     while(t--){
     99         cin >> n >> k;
    100         cin >> s+1;
    101         for (int i = 1; i <= n;i++)
    102             if (s[i]=='1')
    103                 lfto[i] = lfto[i - 1] + 1, lftz[i] = lftz[i - 1];
    104             else
    105                 lftz[i] = lftz[i - 1] + 1, lfto[i] = lfto[i - 1];
    106         for (int i = 1; i <= n&&k;i++)
    107             if (s[i]=='0'){
    108                 if (lfto[i-1]<=k){
    109                     int pre = lftz[i - 1];
    110                     swap(s[pre + 1], s[i]);
    111                     k -=lfto[i - 1];
    112                 }
    113                 else{
    114                     swap(s[i], s[i-k]);
    115                     k = 0;
    116                 }
    117             }
    118         cout << s + 1 << "
    ";
    119     }
    120     return 0;
    121 }
    View Code

    F. Equalizing Two Strings

    Description

    给出两个字符串s,t,每次可以选择等长的两个不要求相同的字串进行翻转。

    问能否将st翻转为相同。

    Solution

    1,字母数量不同$ ightarrow NO$

    2,字母数量相同且存在大于1$ ightarrow YES$

    3,字母相同且数目均为1,则考虑两个序列奇偶性是否相同。

      1 #include <algorithm>
      2 #include <numeric>
      3 #include <cctype>
      4 #include <cmath>
      5 #include <cstdio>
      6 #include <cstdlib>
      7 #include <cstring>
      8 #include <iostream>
      9 #include <map>
     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 inline int lowbit(int x){
     88     return x & (-x);
     89 }
     90 struct node{
     91     char ch;
     92     int id;
     93     node(){}
     94     node(char ch,int id){
     95         this->ch = ch;
     96         this->id = id;
     97     }
     98 };
     99 char s1[maxn], s2[maxn];
    100 int main(int argc, char const *argv[])
    101 {
    102 #ifndef ONLINE_JUDGE
    103     freopen("in.txt","r", stdin);
    104     // freopen("out.txt","w", stdout);
    105 #endif
    106     fastIO;
    107     int t;
    108     cin >> t;
    109     while(t--){
    110         cin >> n;
    111         cin >> s1 >> s2;
    112         vector<int> num1(26, 0), num2(26, 0);
    113         for (int i = 0; i < n;i++)
    114             num1[s1[i] - 'a']++, num2[s2[i] - 'a']++;
    115         int f = 1;
    116         for (int i = 0; i < 26;i++)
    117             if (num1[i]!=num2[i]){
    118                 f = 0;
    119                 break;
    120             }
    121             else{
    122                 if (num1[i]>1)
    123                     f = 2;
    124             }
    125         if (!f)
    126             puts("NO");
    127         else if (f==2)
    128             puts("YES");
    129         else{
    130             int f1 = 0, f2 = 0;
    131             for (int i = 0; i < n;i++)
    132                 for (int j = 0; j < i;j++){
    133                     if (s1[i]>s1[j])
    134                         ++f1;
    135                     if (s2[i]>s2[j])
    136                         ++f2;
    137                 }
    138             if ((f1+f2)%2==0)
    139                 puts("YES");
    140             else
    141                 puts("NO");
    142         }
    143     }
    144     return 0;
    145 }
    View Code
  • 相关阅读:
    MySQL练习题
    InnoDB存储引擎+显示数据库引擎
    EMP+DEPT+SALGRADE 表的基本操作2
    EMP+DEPT+SALGRADE 表的基本操作1
    Git的使用
    JavaScript动画实例:旋转的正三角形
    JavaScript动画实例:曲线的绘制
    JavaScript动画实例:螺旋线
    JavaScript图形实例:阿基米德螺线
    JavaScript图形实例:平面镶嵌图案
  • 原文地址:https://www.cnblogs.com/mooleetzi/p/11801987.html
Copyright © 2020-2023  润新知