育华周赛 第十三期
已结束
乐多
开始于: 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
发现最终结果是一样的,所以我们可以猜测结果不以顺序的改变而改变
再观察一下 可以得到 ;
然后使用归纳法 容易证明
结果
更简单的说:只要按照顺去粘在一起即可
#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
两颗红宝石的距离是的倍数
可得红宝石的坐标对取余不变
那么我们只要统计对取余余数的个数,找到最大值即可
#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