首页 > 其他分享 >YACS2023年1月丙组

YACS2023年1月丙组

时间:2023-01-31 23:34:26浏览次数:61  
标签:int rep 丙组 ++ ans c10 c5 YACS2023

T3: 找零

对于 \(20\) 块,优先找 \(10+5\),其次是 \(5+5+5\)

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)

using namespace std;

int main() {
    int n;
    cin >> n;
    
    vector<int> a(n);
    rep(i, n) cin >> a[i];
    
    rep(i, n) {
        assert(a[i] == 5 or a[i] == 10 or a[i] == 20); 
    }
    
    int ans = 0;
    int c5 = 0, c10 = 0;
    rep(i, n) {
        if (a[i] == 5) {
            ans++;
            c5++;
        }
        if (a[i] == 10) {
            if (c5 >= 1) {
                ans++;
                c10++;
                c5--;
            }
        }
        if (a[i] == 20) {
            if (c10 >= 1 and c5 >= 1) {
                ans++;
                c10--;
                c5--;
            }
            else if (c5 >= 3) {
                ans++;
                c5 -= 3;
            }
        }
    }
    
    cout << ans << '\n';
    
    return 0;
}

T4: 新年灯会

可以找连续的 \(p\) 个灯笼里亮着的最多的那一段就行了,因为亮着的最多,意味着坏掉的灯笼就是最少的

不妨将坏掉的灯笼标记为 0,亮着的灯笼标记为 1

可以用前缀和来加速查询

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)

using namespace std;

int main() {
    int n, m, p;
    cin >> n >> m >> p;
    
    vector<int> a(n+1, 1);
    a[0] = 0;
    rep(i, p) {
        int t;
        cin >> t;
        a[t] = 0;
    }
    
    rep(i, n) a[i+1] += a[i];
    
    int ans = 0;
    rep(i, n-m+1) {
        int now = a[i+m] - a[i];
        ans = max(ans, now);
    }
    
    cout << m-ans << '\n';
    
    return 0;
}

标签:int,rep,丙组,++,ans,c10,c5,YACS2023
From: https://www.cnblogs.com/Melville/p/17081170.html

相关文章

  • 2022 9/23周赛丙组记录
    训练过程分析:这次比赛四道题,第一道我花了23分钟,错一次,编译错误。第二道题,我提交了两次,第一次答案错误。第三题我看不懂题目。第四题时间超限,只对了9%。两小时得了209......
  • YACS2022年8月丙组
    T1:角谷猜想模拟代码实现n=int(input())whilen>1:ifn%2==1:n=n*3+1else:n//=2print(n,end='')T2:屏幕比例约分......