zoukankan      html  css  js  c++  java
  • 【非原创】codeforces 1029F Multicolored Markers 【贪心+构造】

    题目:戳这里

    题意:给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
    ", ans);
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    Linux:Day45(下)
    Linux:Day45(上)
    Linux:Day44(下)
    彻底理解JDK异步
    Ribbon是什么?
    RocketMQ学习笔记(一)eclipse版的quickstart
    线性表的遍历
    八皇后问题
    汉诺塔
    servlet的url-pattern规则
  • 原文地址:https://www.cnblogs.com/zmin/p/9601081.html
Copyright © 2011-2022 走看看