第 17 场小白入门赛蓝桥杯

第 17 场小白入门赛

2 北伐军费

发现每次选大的更优,所以可以排序之后,先手取右边,后手取左边。

实际发现,对于 A − B A-B A−B 的结果来说,后手对于这个式子的贡献是 − − a i --a_i −−ai ,也就是 a i a_i ai ,实际答案就是数组之和。

cpp 复制代码
void solve(){
    cin >> n;
    for(int i = 1; i <= n; i ++) cin >> a[i]; 
    cout << accumulate(a + 1, a + n + 1, 0LL) << '\n';
}

4 三顾茅庐

找规律,对于 x ≤ y x\leq y x≤y 的情况 2 2 2 次一循环。

对于 x > y x>y x>y 的情况, x x x 每次回减 y y y 直到用完 k k k 次机会或者 x < = y x<=y x<=y 了,实际就是取模的过程。

cpp 复制代码
void solve(){
    int x, y, k;
    cin >> x >> y >> k;
    if(!y){
        cout << x << '\n';
        return ;
    }
    if(x <= y){
        cout << ((k & 1) ? y - x : x) << '\n';
    }
    else{
        int t = (x / y);
        if(k > t){
            k -= t;
            x %= y;
            cout << ((k & 1) ? y - x : x) << '\n';
        }
        else{
            cout << x - k * y << '\n';
        }
    }
}

3 挑选武将

思路比较简单,将每个城池出现几个武将排序,从前往后枚举,只要当前选过的加上剩余的 ≥ k \geq k ≥k 即可。

蓝桥的 oj 比较垃圾,会 RE 只会返回 WA,非常不智能。

cpp 复制代码
void solve(){
    cin >> n >> k;
    for(int i = 1; i <= n; i ++){
        cin >> x;
        a[x] ++;
    }
    vector<int> vc;
    for(int i = 1; i <= 100000; i ++){
        if(a[i]) vc.push_back(a[i]);
    } 
    sort(vc.begin(), vc.end());
    vector<int> sum(vc.size());
    sum[0] = vc[0];
    for(int i = 1; i < vc.size(); i ++) sum[i] = vc[i] + sum[i - 1];
    auto ask = [&] (int l, int r){
        if(l > r) return 0LL;
        if(!l) return sum[r];
        return sum[r] - sum[l - 1];
    };
    int res = 0;
    for(int i = 0; i < vc.size() && (i + 1) <= k; i ++){
        if((i + 1) + ask(i + 1, vc.size() - 1) >= k) res = i + 1;
    }
    cout << res << '\n';
}

5 逆天改命

给你一个长度为 n n n 的数组 b b b ,你有一个 ∀ a i = 0 \forall a_i=0 ∀ai=0 的数组 a a a 。

可以执行以下两种操作 :

1,选取 [l, r] 区间,这个区间必须存在 a i = 0 a_i=0 ai=0 ,令所有数 + 1

2,选取 [l, r] 区间,这个区间不存在 a i = 0 a_i=0 ai=0 , 令所有数 - 1

很有意思的一道题目。

发现对于数组操作的过程中,一定不可能让最小值 ≥ 2 \geq 2 ≥2 。

因为最后一个 0 0 0 ,只能被选一次。

只要有 01 01 01 ,就能构造。

cpp 复制代码
void solve(){
    int n, x, fg = 0;
    cin >> n;
    while(n --){
        cin >> x;
        fg |= (x == 0 || x == 1);
    }
    cout << (fg ? "YES" : "NO") << '\n';
}

6 智算士气

m = p 1 c 1 × p 2 c 2 × ⋯ × p i c i m=p_1^{c_1}\times p_2^{c_2}\times \cdots \times p_i ^{c_i} m=p1c1×p2c2×⋯×pici 。

对于每一位,至少存在一个数为 p i c i p_i^{c_i} pici ,正难则反,第 i i i 位共有 ( c i + 1 ) n − c i n (c_i+1)^n-c_i^n (ci+1)n−cin 种方案,考虑所有位,答案为 ∏ i ( c i + 1 ) n − c i n \prod _i (c_i+1)^n-c_i^n ∏i(ci+1)n−cin 。

cpp 复制代码
map<int, int> pm;

void solve(){ 
    cin >> n >> m;

    for(int i = 2; i <= m / i; i ++){
        while(m % i == 0){
            pm[i] ++;
            m /= i;
        }
    }   
    if(m > 1) pm[m] ++;
    int res = 1;
    for(auto [x, y] : pm){ 
        res *= ksm(y + 1, n, mod) - ksm(y, n, mod);
        res %= mod;
        if(res < 0) res += mod;
    }
    cout << res;
}
相关推荐
雾月5515 分钟前
LeetCode 1292 元素和小于等于阈值的正方形的最大边长
java·数据结构·算法·leetcode·职场和发展
YuforiaCode2 小时前
第十二届蓝桥杯 2021 C/C++组 直线
c语言·c++·蓝桥杯
知来者逆2 小时前
计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解
图像处理·人工智能·深度学习·算法·目标检测·计算机视觉·rf-detr
阿让啊2 小时前
C语言中操作字节的某一位
c语言·开发语言·数据结构·单片机·算法
এ᭄画画的北北2 小时前
力扣-160.相交链表
算法·leetcode·链表
爱研究的小陈3 小时前
Day 3:数学基础回顾——线性代数与概率论在AI中的核心作用
算法
渭雨轻尘_学习计算机ing3 小时前
二叉树的最大宽度计算
算法·面试
BB_CC_DD3 小时前
四. 以Annoy算法建树的方式聚类清洗图像数据集,一次建树,无限次聚类搜索,提升聚类搜索效率。(附完整代码)
深度学习·算法·聚类
梁下轻语的秋缘5 小时前
每日c/c++题 备战蓝桥杯 ([洛谷 P1226] 快速幂求模题解)
c++·算法·蓝桥杯
CODE_RabbitV5 小时前
【深度强化学习 DRL 快速实践】逆向强化学习算法 (IRL)
算法