2023武汉大学新生赛
A题
大意:对于一组数,首先执行一次操作,每次执行操作可以令每个数减一,如果有一种数字减到零(数字最小为零),再次执行该操作。
问:将所有数字都减到零。
解:排序,判断两个相邻的数是否相差大于1.
例:1 2 2 4,第一次操作,0 1 1 3,可执行第二次操作,0 0 0 2,可执行第三次,0 0 0 1,输出“no”;
C题
E题签到,规律显然。
k题矩形分割

输入 2 4 ; 输出 4.
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int n,m,sum=0,minn,maxn;
scanf("%d%d",&n,&m);
minn = min (n,m);
maxn = max (n,m);
while (minn>0)
{
sum+=minn;
int t = minn; //中间存数
minn = min(maxn-minn,minn);
maxn = max(maxn-minn,t);
}
printf("%d",sum);
return 0;
}
贪心想法:设矩形的长边为a,短边为b。
每次取边长为b的正方形,刨去b*b正方形后的矩形接着执行同样操作。
显然一个尽可能大的正方形,比多个小正方形单边长之和要小,答案记录短边的和即可。

浙公网安备 33010602011771号