Codeforces | CF1029F 【Multicolored Markers】
这道题其实难度应该小于紫题...除了一点小特判以外没什么难度...\(\leq50\)行代码即可\(AC\)此题
题目大意:给定两个数\(a,b(1\leq a,b\leq 10^{14})\)分别表示红色方格个数和蓝色方格个数,求这\(a\)个红色方格和\(b\)个蓝色方格构成的矩形周长的最小值,且满足在所构成的矩形中至少有一种颜色的所有方块也能构成一个矩形,数据保证存在至少一种合法的染色方案.
这道题本质是数学题,根据矩形周长一定时长与宽的差越小矩形面积越大可以反推出矩形面积一定时长与宽的差越小矩形周长越小,所以我们可以从\(\lfloor\sqrt{a+b}\rfloor\)到\(1\)枚举所构成的大矩形的宽,这样可以保证有合法解即为最优解,不需要再考虑后面其他的合法解.
对于一个合法的大矩形,设其宽为\(i\),长为\(d\),应当满足\(a+b==i\times d\),且对于\(a\)和\(b\)中至少一个数存在一种因数分解方案\(e\times f(e\leq f)\)满足\(e\leq i\)且\(f\leq d\)(即当红色或蓝色方块构成矩形时能够被大矩形所包含),对此我们只需要对\(i\)做一次\(O(\lfloor\sqrt{a+b}\rfloor)\)的枚举.检验时只需对\(a\)和\(b\)做\(O(i)\)的枚举即可(当枚举的宽\(>i\)时显然已经不合法故只需枚举\(\leq i\)的宽).
下面例行放\(AC\)代码\(\downarrow\downarrow\downarrow\)
#include<cstdio>//CF1029F
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdlib>
using namespace std;
long long a,b,c,d;
bool check(int u,long long v){
for(int i=1;i<=u;i++){
if(a%i==0){
long long rep=a/i;
if(i<=u&&rep<=v){
return true;
}
}
}
for(int i=1;i<=u;i++){
if(b%i==0){
long long rep=b/i;
if(i<=u&&rep<=v){
return true;
}
}
}
return false;
}
int main(){
scanf("%lld%lld",&a,&b);
c=a+b;
for(int i=(int)sqrt(c);i;i--){
if(c%i==0){
d=c/i;
if(check(i,d)){
printf("%lld",(d+i)*2);
return 0;
}
}
}
return 0;
}
Codeforces | CF1029F 【Multicolored Markers】的更多相关文章
- Codeforces 176B【计数DP】
题意: 给你两个串s1,s2和一个K, 有一种操作是在一个串切开然后交换位置, 问s1有多少种方法经过K次这样的操作变成s2: 思路: (从来没接触过计数DP...还是太菜...参考了[大牛blog] ...
- CodeForces 604D 【离散数学 置换群】
题意: 给你一个方程,方程太变态不打,给你一个p一个k,p保证是大于等于3的质数,k保证在0~p-1之间的整数.要求对应函数的定义域在0~p-1值域为0~p-1的子集,求这样的函数有多少个... 分析 ...
- CodeForces 602D 【单调队列】【简单数学】
题意: 给你n个数,m次询问,每次询问给l和r代表l和r中间所有子区间中特征值的和. 特征值的定义是在这个区间中找i和j使得|tmp[i]-tmp[j]|/|j-i|最大. 思路: 首先是特征值的定义 ...
- CodeForces 617C【序枚举】
题意: 有两个点喷水,有很多个点有花,给出坐标. 求使得每个花都可以被喷到,两个喷水的半径的平方的和最小是多少. 思路: 枚举其中一个喷水的最大半径. 坑: 这题我贪心的思路有很大问题.一开始也是想这 ...
- CodeForces 602E【概率DP】【树状数组优化】
题意:有n个人进行m次比赛,每次比赛有一个排名,最后的排名是把所有排名都加起来然后找到比自己的分数绝对小的人数加一就是最终排名. 给了其中一个人的所有比赛的名次.求这个人最终排名的期望. 思路: 渣渣 ...
- Codeforces | CF1037D 【Valid BFS?】
题目大意:给定一个\(n(1\leq n\leq 2\cdot10^5)\)个节点的树的\(n-1\)条边和这棵树的一个\(BFS\)序\(a_1,a_2,\dots,a_n\),判断这个\(BFS\ ...
- Codeforces | CF1029C 【Maximal Intersection】
论Div3出这样巨水的送分题竟然还没多少人AC(虽说当时我也没A...其实我A了D...逃) 这个题其实一点都不麻烦,排序都可以免掉(如果用\(priority \_ queue\)的话) 先考虑不删 ...
- Codeforces | CF1029D 【Concatenated Multiples】
\(qwq\)昨天晚上\(Div.3\)过了这道题...早上交了\(1A\)...看在\(CF\)上\(hack\)的情况并不乐观而且也没人来交这题的份上...我决定发一篇题解帮\((zhuang)\ ...
- codeforces 217E 【Alien DNA】
倒序考虑每一个操作,对于一个操作$[l, r]$,他产生的影响区间将是$[r+1,r + r + l - 1]$,如果$r+l-1>K$的话,$K$之后的区间我们是不关心的. 暴力扫描这个区间 ...
随机推荐
- JavaScript动态修改html组件form的action属性
用javaScript动态修改html组件form的action属性,可以在提交时再决定处理表单的页面. <%--JavaScript部分--%><script language=& ...
- 学习yii2.0——依赖注入
依赖注入 依赖注入是一种设计模式,可以搜索“php依赖注入”,这里不阐述了. yii框架的依赖注入 Yii 通过 yii\di\Container 类提供 DI 容器特性. 它支持如下几种类型的依赖注 ...
- opencv2\flann\matrix.h(69): error C2059: 语法错误:“,”
在提示错误的matrix.h头文件中,修改一下,在free前加上_ ,即FLANN_DEPRECATED void _free() .
- C#设计模式之7:适配器模式
适配器模式 使用适配器模式的一个重要的点是首先要识别出什么代码(接口)是已经存在的,什么代码(接口)是新的,需要去适配的.适配器的作用是让旧的(现有的)接口能够匹配新的系统(要去适配的). 比如有下面 ...
- Laravel自带SMTP邮件组件实现发送邮件(QQ、163、企业邮箱都可)
Laravel自带SMTP邮件组件实现发送邮件(QQ.163.企业邮箱都可) laravel自带SMTP邮件配置和遇到的坑 laravel自带SwiftMailer库,集成了多种邮件API,可 ...
- Oracle 备份表数据
--备份表数据 select * from t_owners; --创建备份表 create table t_owners_copy ( id number, name ), addressid nu ...
- Mybatis Dao层注解及XML组合Dao的开发方式
mybatis可以用xml进行数据操作,也可以在dao层用注解的方式,也可以采取xml和dao层接口组合使用的方法.显然 ,后者更加简单. 实体类Student package com.zhao. ...
- javaScript中闭包的工作原理
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...
- 剑指offer(16)栈的压入、弹出序列
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- Android——Activity的简绍
Activity Activity的运行机制其实和JavaEE中的servlet很像,而我们的Android系统也就相当与其servlet容器,Activity在其中进行创建实例.初始化.运行.销毁等 ...