码迷,mamicode.com
首页 > 其他好文 > 详细

【题解】玫瑰与杜鹃

时间:2019-04-10 13:12:38      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:while   pre   namespace   out   nbsp   onclick   stream   tin   color   

题解

   Teddy 很喜欢玫瑰花和杜鹃花。商店里有N个花瓶,第i个花瓶里面有roses[i]朵玫瑰花和lilies[i]朵杜鹃花。如果你买第i个花瓶,那么你就可以得到这个花瓶里面的所有玫瑰花和杜鹃花。每个花瓶最多只能买一次。现在Teddy决定买回一些花瓶,Teddy把得到的所有玫瑰花和杜鹃花围成一个长方形,使得长方形里面的玫瑰花和杜鹃花是间隔的,则如果当前格子是玫瑰花,那么它上下左右相邻的都是杜鹃花。同理,杜鹃花相邻的都是玫瑰花。还有个要求,Teddy必须把买到的玫瑰和杜鹃全部用完。
    由于Teddy比较喜欢方方正正的形状,因此希望长方形的长和宽的差的绝对值尽量小,你能把这个最小值找到吗?如果无法围成长方形,则输出-1。注意:正方形也是长方形的一种。

 

输入输出格式

输入格式

  多组测试数据。
    第一行:一个整数r, 表示共有r组测试数据,1<=r<=10。
    每组测试数据的格式是:
         第一行:一个整数n, 表示花瓶的数量。1<=n<=16。
         第二行:n个整数,第i个整数表示第i个花瓶的玫瑰花数量,范围是0至10000。
         第三行:n个整数,第i个整数表示第i个花瓶的杜鹃花数量。范围是0至10000。

 

输出格式

  共r行,每行一个整数,对应一组测试数据,表示长方形的长和宽的差的绝对值的最小值。或者-1.。

 

输入输出样例

输入样例

3
2
2   4
4   2
3
2  7  3
3  4  1
4
4  5  2  1
6  10  5  9

 

输出格式

1
0
-1

 

题解

  容易发现,当玫瑰花与杜鹃花数量相差小于等于1时,可以拼成一个矩形。

技术图片
#include <iostream>

#define MAX_N (16 + 5)

#define abs(x) ((x) >= 0 ? (x) : -(x))

using namespace std;

int G;
int n;
int a[MAX_N];
int b[MAX_N];
int ans;

void DFS(int x, int ta, int tb)
{
    if(abs(ta - tb) <= 1)
    {
        for(register int i = 1; i * i <= (ta + tb); ++i)
        {
            if((ta + tb) % i) continue;
            ans = min(ans, abs(i - (ta + tb) / i));
        }
    }
    for(register int i = x; i <= n; ++i)
    {
        DFS(i + 1, ta + a[i], tb + b[i]);
    }
    return;
}

int main()
{
    cin >> G;
    while(G--)
    {
        cin >> n;
        for(register int i = 1; i <= n; ++i)
        {
            cin >> a[i];
        }
        for(register int i = 1; i <= n; ++i)
        {
            cin >> b[i];
        }
        ans = 2147483647;
        for(register int i = 1; i <= n; ++i)
        {
            DFS(i + 1, a[i], b[i]);
        }
        if(ans == 2147483647) cout << "-1\n";
        else cout << ans << "\n";
    }
    return 0;
}
参考程序

 

【题解】玫瑰与杜鹃

标签:while   pre   namespace   out   nbsp   onclick   stream   tin   color   

原文地址:https://www.cnblogs.com/kcn999/p/10682737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!