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

    940A

      转化为求一个有序数列中满足条件的最大子集。

     1 #include <iostream>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(0);
     9     int n, d, h, t, meow;
    10     cin >> n >> d;
    11     int rua[n];
    12     for (int i = 0; i < n; i++)
    13         cin >> rua[i];
    14     sort(rua, rua + n);
    15     h = t = meow = 0;
    16     while (t < n)
    17         if (rua[t] - rua[h] <= d){
    18             t += 1;
    19             meow = max(meow, t - h);
    20         }
    21         else
    22             h += 1;
    23     cout << n - meow;
    24     return 0;
    25 }

    940B

      当可被整除时,整除与递减取最优;

      否则递减至可被整除。

     1 #include <iostream>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(0);
     9     long long n, k, a, b, cost, t;
    10     cin >> n >> k >> a >> b;
    11     cost = 0;
    12     while (n >= k && k != 1){
    13         t = n % k;
    14         if (t == 0){
    15             long long temp = n;
    16             n /= k;
    17             cost += min(b, (temp - n)*a);
    18         }
    19         else{
    20             n -= t;
    21             cost += t*a;
    22         }
    23     }
    24     cout << cost + (n - 1)*a;
    25     return 0;
    26 }

    940C

      字符串处理,转化为高精加法,考虑此长彼短两种特殊情况。

     1 #include <iostream>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(0);
     9     int n, k, flag = 1;
    10     int letter[26] = {0};
    11     int table[26] = {0};
    12     int retable[26] = {0};
    13     int hex = 0;
    14     cin >> n >> k;
    15     char input[n];
    16     int result[k + 1] = {0};
    17     cin >> input;
    18     for (int i = 0; i < n; i++)
    19         letter[input[i] - 'a'] = 1;
    20     for (int i = 0; i < 26; i++)
    21         if (letter[i] == 1){
    22             table[i] = hex;
    23             retable[hex] = i;
    24             hex += 1;
    25         }
    26     for (int i = 0; i < k; i++)
    27         result[i + 1] = i < n? table[input[i] - 'a']: flag = 0;
    28     if (flag)
    29         result[k] += 1;
    30     for (int i = k; i > 0; i--)
    31         if (result[i] >= hex){
    32             result[i] -= hex;
    33             result[i - 1] += 1;
    34         }
    35     if (result[0] != 0)
    36         cout << char(retable[result[0]] + 'a');
    37     for (int i = 1; i < k + 1; i++)
    38         cout << char(retable[result[i]] + 'a');
    39     return 0;
    40 }

    940D

      0转1约束l,1转0约束r。

     1 #include <iostream>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(0);
     9     int l = -1000000000;
    10     int r = 1000000000;
    11     int n;
    12     cin >> n;
    13     int a[n];
    14     char b[n];
    15     for (int i = 0; i < n; i++)
    16         cin >> a[i];
    17     cin >> b;
    18     for (int i = 4; i < n; i++)
    19         if (b[i] == '0' && b[i - 1] == '1')
    20             for (int j = i - 4; j <= i; j++)
    21                 r = min(r, a[j] - 1);
    22         else if (b[i] == '1' && b[i - 1] == '0')
    23             for (int j = i - 4; j <= i; j++)
    24                 l = max(l, a[j] + 1);
    25     cout << l << ' ' << r;
    26     return 0;
    27 }

    940E

      贪心:

        长度为 c+x ( x<c ) 的序列,等价于一个长度为 c 的序列加上 x 个长度为1的序列。

        长度为 2c ( m∈Z ) 的序列,当 2 个移除项处于一段长度为 c 的子序列时,将其看为 2 段长度为 c 的序列处理,得到最优解,其他情况等价。

      ST表查找区间最小值。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int st[100001][17], meow[100001];
     5 long long gugugu[100001], sum[100001];
     6 int n, c;
     7 
     8 void st_init(){
     9     int jmax = floor(log(n)/log(2));
    10     for (int i = 1; i <= n; i++)
    11         st[i][0] = meow[i];
    12     for (int j = 1; j <= jmax; j++)
    13         for (int i = 1; i <= n; i++)
    14             if (i + (1 << j) - 1 <= n)
    15                 st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
    16 }
    17 
    18 int st_query(int n, int m){
    19     int k = floor(log(m - n + 1) / log(2));
    20     return min(st[n][k], st[m - (1 << k) + 1][k]);
    21 }
    22 
    23 string rua(){
    24     cin >> n >> c;
    25     for (int i = 1; i <= n; i++){
    26         cin >> meow[i];
    27         sum[i] = sum[i - 1] + meow[i];
    28     }
    29     st_init();
    30     for (int i = 1; i <= n; i++){
    31         long long gu = gugugu[i - 1] + meow[i];
    32         long long bugu = i >= c? gugugu[i - c] + sum[i] - sum[i - c] - st_query(i - c + 1, i): 1000000000000000000;
    33         gugugu[i] = min(gu, bugu);
    34     }
    35     cout << gugugu[n];
    36     return "mole!";
    37 }
    38 
    39 int main(){
    40     rua();
    41     return 0;
    42 }

    940F

      tbc.

  • 相关阅读:
    一周精彩内容分享(第 5 期):货拉拉悲剧的背后
    关于 HTTP 后端人员需要了解的 20+ 图片!
    百度地图午夜暗蓝风格
    百度地图开发自定义信息窗口openInfoWindow样式
    百度地图infowindow上添加自定义点击事件
    js显示当前日期时间和星期几
    iview 树形异步加载,首次加载子节点不能选择,点击父节点后才可以选择
    js 修改属性名和值。并只保留需要的属性
    css 条形百分比
    echarts 3d饼图
  • 原文地址:https://www.cnblogs.com/neopolitan/p/8476251.html
Copyright © 2011-2022 走看看