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

【非原创】codeforces 1029F Multicolored Markers 【贪心+构造】

时间:2018-09-06 22:59:30      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:print   name   www   splay   scanf   遍历   cst   mes   cstring   

题目:戳这里

题意:给a个红色小方块和b个蓝色小方块,求其能组成的周长最小的矩形,要求红色或蓝色方块至少有一个也是矩形。

思路来源:戳这里

解题思路:遍历大矩形可能满足的所有周长,维护最小值即可。不易想到的是求合理周长的方法。判断方法是能否放进去一个蓝色矩形或者红色矩形,只要能放进去一个就满足条件了。具体看代码。

技术分享图片
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <string>
 5 #include <vector>
 6 #include <map>
 7 #include <cmath>
 8 #include <iostream>
 9 using namespace std;
10 typedef long long ll;
11 const int maxn = 1e6 + 10;
12 int n;
13 int na[maxn];
14 int main()
15 {
16     ll a, b;
17     scanf("%lld %lld", &a, &b);
18     ll sum = a + b;
19     ll ans = 2 * (a + b + 1);
20     ll minn = a + b;
21     for(ll i = 1; i * i <= sum; ++i)
22     {
23         if(a % i == 0)  minn = min(minn, a / i);
24         if(b % i == 0)  minn = min(minn, b / i);//minn就是用来找到那个能放进去的小矩形
25         if((a + b) % i == 0 && minn <= (a + b) / i) ans = min(ans, 2 * ((a + b) / i + i));//维护合理的大矩形周长
26     }
27     printf("%lld\n", ans);
28     return 0;
29 }
View Code

 

【非原创】codeforces 1029F Multicolored Markers 【贪心+构造】

标签:print   name   www   splay   scanf   遍历   cst   mes   cstring   

原文地址:https://www.cnblogs.com/zmin/p/9601081.html

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