育华周赛 第十三期

已结束 乐多 开始于: 2025-4-4 18:00 54 小时 主持人: 17

周赛13

比赛期间使用ai写代码是不道德的,是对自己不负责任的行为

T1

重建魔塔 显然取总修建层数和层数的小值

#include <bits/stdc++.h>
using namespace std;
int main() {
    int x, y, z;
    cin >> x >> y >> z;
    cout << min(x * y, z);
    return 0;
}

T2

观察样例一 我们先取3,4 消耗魔法12 ,剩下 7,5 消耗魔法35 , 剩下12 总共消耗47
同样先取4,5 消耗魔法20 , 剩下 3,9 消耗魔法27 , 剩下 12 总共消耗47 发现最终结果是一样的,所以我们可以猜测结果不以顺序的改变而改变 再观察一下 可以得到 47=34+45+5347=3*4 + 4*5 + 5*3; 然后使用归纳法 容易证明 结果 S=1i<jnaiaj S=\sum_{1 \leq i < j \leq n} a_i \cdot a_j

更简单的说:只要按照顺去粘在一起即可

#include <bits/stdc++.h>
using namespace std;
long long a[100010];
int main() {
    long long n;
    cin>> n;
    for(int i = 1;i <= n;++i){
        cin>> a[i];
    }
    long long ans = 0;
    // 从1粘到2 再粘到3 直到n为止
    for(int i = 2;i <= n;++i){
        ans += a[i] * a[i - 1];
        a[i] += a[i-1];
    }
    cout<< ans << endl;
    return 0;
}

T3

两颗红宝石的距离是mm的倍数

可得红宝石的坐标对mm取余不变

那么我们只要统计对mm取余余数的个数,找到最大值即可

#include <bits/stdc++.h>
using namespace std;
int a[100010];

int main() {
    long long n,m;
    cin>> n >> m;
    int sum = 0;
    for(int i = 1;i <= n;++i){
        int x;
        cin>> x;
        a[i%m] += x;
        sum += x;
    }

    int nmax = 0;
    for(int i = 0; i< m;++i){
        nmax = max(nmax,a[i]);
    }
    cout << sum - nmax << endl;
    return 0;
}
状态
已结束
规则
乐多
题目
6
开始于
2025-4-4 18:00
结束于
2025-4-7 0:00
持续时间
54 小时
主持人
参赛人数
17