标签: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 }
【非原创】codeforces 1029F Multicolored Markers 【贪心+构造】
标签:print name www splay scanf 遍历 cst mes cstring
原文地址:https://www.cnblogs.com/zmin/p/9601081.html