A题
大意:对于一组数,首先执行一次操作,每次执行操作可以令每个数减一,如果有一种数字减到零(数字最小为零),再次执行该操作。
问:将所有数字都减到零。
解:排序,判断两个相邻的数是否相差大于1.
例:1 2 2 4,第一次操作,0 1 1 3,可执行第二次操作,0 0 0 2,可执行第三次,0 0 0 1,输出“no”;
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正方形后的矩形接着执行同样操作。
显然一个尽可能大的正方形,比多个小正方形单边长之和要小,答案记录短边的和即可。