• Codeforces Global Round 14


    C. Phoenix and Towers
    这题让我们把n个block分成m个塔,让它们的高度差不超过x。
    因为每个block的高度不超过x,首先m个block就分给前m个塔,然后每次往高度最小的塔上加block,这样得到的总是合法的。因为得到的不会和别的塔相差x。

    代码
    
     int main()
     2 {
     3     ios::sync_with_stdio(false); cin.tie(nullptr);
     4 
     5     int t;
     6     cin >> t;
     7     while (t--) {
     8         int n, m, x;
     9         cin >> n >> m >> x;
    10         cout << "YES" << endl;
    11         set> s;
    12         for (int i = 1; i <= m; i++) {
    13             s.insert({ 0,i });
    14         }
    15         for (int i = 1; i <= n; i++) {
    16             int tmp;
    17             cin >> tmp;
    18             pair p= *s.begin();
    19             s.erase(s.begin());
    20             cout << p.second << " ";
    21             s.insert({ p.first + tmp,p.second });
    22         }
    23         cout << endl;
    24     }
    25 
    26 }    
      

    D. Phoenix and Socks
    匹配袜子,这题我比赛时写出来了!

    代码
    
     1 int main()
     2 {
     3     ios::sync_with_stdio(false); cin.tie(nullptr);
     4 
     5     int t;
     6     cin >> t;
     7     while (t--) {
     8         int n, l, r;
     9         cin >> n >> l >> r;
    10         memset(L, 0, sizeof(L));
    11         memset(R, 0, sizeof(R));
    12         for (int i = 1; i <= n; i++) {
    13             int tmp;
    14             cin >> tmp;
    15             if (i <= l) //因为颜色的种类也就n种,不多。先桶排序,把颜色相同的放在一起
    16                 L[tmp]++;
    17             else
    18                 R[tmp]++;  
    19         }
    20         for (int i = 1; i <= n; i++) {
    21             int mi = min(L[i], R[i]);   //有的不需要操作,直接匹配
    22             L[i] -= mi;
    23             R[i] -= mi;
    24             l -= mi;
    25             r -= mi;
    26         }
    27 
    28         if (l < r) {
    29             swap(L, R);
    30             swap(l, r);
    31         }
    32 
    33         int dif = (l - r) / 2;
    34         int ans = 0;
    35         for (int i = 1; i <= n; i++) {
    36             if (dif >= L[i] / 2) {      //再将多的那种袜子的颜色相同的进行转换操作
    37                 dif -= L[i] / 2;        //但最多只转换dif次,不能多了
    38                 ans += L[i] / 2;
    39                 L[i] %= 2;
    40             }
    41             else {
    42                 ans += dif;
    43                 dif = 0; 
    44                 break;
    45             }
    46         }
    47 
    48         ans += r + 2 * dif;   //最后将剩下的dif进行2次操作,r个直接变颜色
    49         cout << ans << endl;
    50     }
    51 }    
      
  • 相关阅读:
    Solidity通过合约转ERC20代币
    各种开源协议区别
    shell脚本之函数
    shell脚本之循环和循环控制
    shell脚本之if判断以及case多分支选择
    shell脚本之数组
    shell脚本之变量
    nginx常用内置变量
    nignx配置文件详解
    nginx源码安装./configure常见参数详解
  • 原文地址:https://www.cnblogs.com/lingshi321/p/14726992.html
Copyright © 2020-2023  润新知