这是隐藏的最深的一个水题。其隐藏性能如此之好,是因为题目的描述十分蛋疼,写了好多好多的废话。
让我们这种过不了六级的孩子情何以堪啊。
是这样的,给你若干个矩形,每次在所有的矩形中两两组合形成许多许多新的矩形,同时宽和高也是任意组合的。(但是组合永远只是一个宽和一个高相组合)
对于每做一次操作,你还可以改变操作后矩形的宽和高一个单位(变小或者变大)
问你变出一个正方形的最小步数是多少?
其实很简单,直接判断初始状态是否为正方形以及第一步可不可以变出正方形。
剩下的情况直接返回(sum+1)/2。
自己理解一下就可以了,太简单,我就不说了。
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 510
using namespace std;
int w[maxn],h[maxn];
int ans,n;
int Abs(int x)
{
return x>=0?x:-x;
}
int count()
{
int tot=~0u>>1;
for (int i=1; i<=n; i++) if (w[i]==h[i]) return 0;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{
tot=min(tot,Abs(w[i]-h[j]));
}
if (tot<3) return 1;
return (tot+1)/2;
}
int main()
{
int cas=0;
while (scanf("%d",&n)!=EOF)
{
for (int i=1; i<=n; i++) scanf("%d%d",&w[i],&h[i]);
ans=count();
printf("Case %d : %d
",++cas,ans);
}
return 0;
}