UVA11737_Extreme Primitive Society

这是隐藏的最深的一个水题。其隐藏性能如此之好,是因为题目的描述十分蛋疼,写了好多好多的废话。

让我们这种过不了六级的孩子情何以堪啊。

是这样的,给你若干个矩形,每次在所有的矩形中两两组合形成许多许多新的矩形,同时宽和高也是任意组合的。(但是组合永远只是一个宽和一个高相组合)

对于每做一次操作,你还可以改变操作后矩形的宽和高一个单位(变小或者变大)

问你变出一个正方形的最小步数是多少?

其实很简单,直接判断初始状态是否为正方形以及第一步可不可以变出正方形。

剩下的情况直接返回(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\n",++cas,ans);
    }
    return 0;
}

 

posted @ 2013-11-13 23:43  092000  阅读(212)  评论(0编辑  收藏  举报