• Codeforces Edu Round 72 (Rated for Div. 2)


    有点难。

    题目连接:https://codeforces.com/contest/1217


    A:

    想清楚就是一道口算题。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,b) sort(a+1,a+1+b)
     9 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    10 #define rep0(i,a,b) for(int i=a;i<b;++i)
    11 #define eps 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 /* namespace */
    17 using namespace std;
    18 /* header end */
    19 
    20 int t;
    21 
    22 int main() {
    23     scanf("%d", &t);
    24     while (t--) {
    25         int a, b, c; scanf("%d%d%d", &a, &b, &c);
    26         if (!c) {
    27             a > b ? puts("1") : puts("0");
    28         continue;
    29         }
    30         printf("%d
    ", min(c + 1, max((a + c - b + 1) / 2, 0)));
    31     }
    32     return 0;
    33 }
    View Code

    B:

    贪心。按砍完一刀之后改变头的数量来排序。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,b) sort(a+1,a+1+b)
     9 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    10 #define rep0(i,a,b) for(int i=a;i<b;++i)
    11 #define eps 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 /* namespace */
    17 using namespace std;
    18 /* header end */
    19 
    20 const int maxn = 200;
    21 pair<int, int>cut[maxn];
    22 
    23 int main() {
    24     int t; scanf("%d", &t);
    25     while (t--) {
    26         int n, head, maxx = 0;
    27         scanf("%d%d", &n, &head);
    28         rep1(i, 1, n) {
    29             int a, b; scanf("%d%d", &a, &b);
    30             maxx = max(a, maxx);
    31             cut[i].first = a - b, cut[i].second = a;
    32         }
    33         head -= maxx;
    34         sort(cut + 1, cut + 1 + n, greater<pair<int, int>>());
    35         if (head <= 0) {
    36             puts("1");
    37             continue;
    38         }
    39         if (cut[1].first <= 0) {
    40             puts("-1");
    41             continue;
    42         }
    43         int ans = head / cut[1].first + 1;
    44         if (head % cut[1].first) ans++;
    45         printf("%d
    ", ans);
    46     }
    47     return 0;
    48 }
    View Code

    C:

    巧妙的想法没有,看到时限4s就是O(n^2)暴力开搞。要先预处理出所有连续0的位置。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,b) sort(a+1,a+1+b)
     9 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    10 #define rep0(i,a,b) for(int i=a;i<b;++i)
    11 #define epre 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 /* namespace */
    17 using namespace std;
    18 /* header end */
    19 
    20 const int maxn = 2e5 + 10;
    21 int t, pre[maxn];
    22 char s[maxn];
    23 
    24 int main() {
    25     scanf("%d", &t);
    26     while (t--) {
    27         scanf("%s", s + 1);
    28         int n = strlen(s + 1);
    29         ll ans = 0;
    30         rep1(i, 1, n) {
    31             if (s[i] == '1') pre[i] = -1;
    32             else pre[i] = s[i - 1] == '0' ? pre[i - 1] : i;
    33         }
    34         rep1(r, 1, n) {
    35             ll curr = 0;
    36             for (int l = r; l >= 1; l--)
    37                 if (s[l] == '1') {
    38                     if (r - l >= 20) break;
    39                     curr += (1 << (r - l));
    40                     if (r - l + 1 == curr) ans++;
    41                 } else {
    42                     if (r + 1 - curr >= pre[l] && r + 1 - curr <= l) ans++;
    43                     l = pre[l];
    44                 }
    45         }
    46         printf("%lld
    ", ans);
    47     }
    48     return 0;
    49 }
    View Code
  • 相关阅读:
    继承性03
    继承性
    Arrays与Math类
    Static关键字
    random模块,time模块,os模块,sys模块
    re模块
    冒泡排序、递归、二分查找
    内置函数
    生成器和生成器表达式
    迭代器
  • 原文地址:https://www.cnblogs.com/JHSeng/p/11474948.html
Copyright © 2020-2023  润新知