1759D(数位变0)
题目链接
题目大意:
给你两个整数n, m。你需要求一个数,它满足如下条件:
- 是n的整数倍,且倍数小于m。
- 你应该使其末尾的0尽可能的多(如100后面有2个零,1020后面有一个零,我们应该输出100),在相同的情况下应该保证其最大化。
- 如果不能找到末尾有零的数就输出n * m 即可。
解题思路:
这属于构造类型了吧,我们构造的目标是满足条件下的末尾0最多的数。那怎么构造呢?
我们可以发现一个规律:只有因子出现2和5才会出现一个0,两个的话会出现2个.......(你可能会抬杠5*6=30不是出现了吗?30是可以分解为一个5,和 一个2的)。那么我们的目标就明确了,首先找到n里面的因子2和5的个数(当然要把后缀0先去了哈)
ll cnt2 = 0, cnt5 = 0;
int k = n;
while (k % 10 == 0) k /= 10; //去0
while (k % 2 == 0) cnt2 ++, k /= 2; //找2
while (k % 5 == 0) cnt5 ++, k /= 5; //找5
接下来就是匹配n的因子了,这里要先匹配5为保证最大化
ll res = 1;
while (cnt5 > 0 && res * 2 <= m) //匹配5
{
cnt5 --, res *= 2;
}
while (cnt2 > 0 && res * 5 <= m) //匹配2
{
cnt2 --, res *= 5;
}
while (res * 10 <= m) //匹配10
{
res *= 10;
}
int t = m / res; //为保证其结果最大化,在保证m是res倍数的前提下,让其变为其倍数。同时也可以包括无法求得有后缀0的情况
if (t) res *= t;
AC代码:
#include<bits/stdc++.h>
#define ll long long
#define sz(a) ((int) (a).size())
#define vi vector< int >
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long
#define PII pair<int, int>
using namespace std;
const int N = 1e6 + 10;
ll n, m;
void solved()
{
cin >> n >> m;
ll cnt2 = 0, cnt5 = 0;
int k = n;
while (k % 10 == 0) k /= 10; //去0
while (k % 2 == 0) cnt2 ++, k /= 2; //找2
while (k % 5 == 0) cnt5 ++, k /= 5; //找5
ll res = 1;
while (cnt5 > 0 && res * 2 <= m) //匹配5
{
cnt5 --, res *= 2;
}
while (cnt2 > 0 && res * 5 <= m) //匹配2
{
cnt2 --, res *= 5;
}
while (res * 10 <= m) //匹配10
{
res *= 10;
}
int t = m / res; //为保证其结果最大化,在保证m是res倍数的前提下,让其变为其倍数。同时也可以包括无法求得有后缀0的情况
if (t) res *= t;
cout << n * res << '\n';
}
int main(){
ios :: sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t;
cin >> t;
while (t -- ) solved();
return 0;
}
/* stuff you should look for 你应该寻找的东西
* int overflow, array bounds (int)溢出,数组边界
* special cases (n=1?) 特殊情况(n=1?)
* do smth instead of nothing and stay organized 做一些事情而不是什么也不做,保证效率
* WRITE STUFF DOWN 将东西写下
* DON'T GET STUCK ON ONE APPROACH 不要在一个地方死磕
*/
1759D(数位变0)的更多相关文章
- PHP导出Excel 数字末尾变0或小数点解决办法
为了管理方便,查阅直观性.很多网站, 或者系统都会自带导出excel或者cvs的功能.但是很多情况下,由于数字超过15位,会被显示成0或者加小数点处理.造成这种情况是由于Excel内 置的数值有效范围 ...
- mysql导出csv文件excel打开后数字用科学计数法显示且低位变0的解决方法
Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0. Excel打开csv文件时,只要字段值都是数字,它 ...
- js数字过大js自动变0
解决方案: <a onclick="checkDate(${item.billday},'${item.bankcard}',${item.limitmoney/100}) 加上引号变 ...
- csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法
保存在csv中的 013812345678,前面的0会被去掉,后面是科学计数法显示.保存成 col1,="013812345678" 即可. 注意,分隔符逗号后面直接接“=”等号. ...
- 处女座和小姐姐(三)-数位dp1.0
链接:https://ac.nowcoder.com/acm/contest/329/G来源:牛客网 题目描述 经过了选号和漫长的等待,处女座终于拿到了给小姐姐定制的手环,小姐姐看到以后直呼666! ...
- java自动给版本升级,遇9变0且前面一个版本加1
/** * 自动升级版本号,版本号+1 * @param version * @return */ private String autoUpgradeVersion(String version){ ...
- Codeforces Round #191 (Div. 2) A. Flipping Game【*枚举/DP/每次操作可将区间[i,j](1=<i<=j<=n)内牌的状态翻转(即0变1,1变0),求一次翻转操作后,1的个数尽量多】
A. Flipping Game time limit per test 1 second memory limit per test 256 megabytes input standard ...
- c# 自动给版本升级,遇9变0且前面一个版本加1
/// <summary> /// 版本辅助类 /// 创建人: /// 创建时间:2019-11-18 13:53:55 /// </summary> public clas ...
- 教你如何将txt复制到excel的各个单元格;并解决科学计数法显示问题及导致的个位数变0问题
1.如果你的txt或log等文件中的数据每个数据刚好都回车了,那么直接粘贴到excel即可: 2.如果你的txt或log等文件中数据较多,回车之后的每一行数据仍需再次分列,那么要求:每一行中需要分列的 ...
- mysql状态取反(0变1,1变0)
如果要改变status状态 update table_name status=ABS(status-1); //取绝对值 则0-->1 1-->0
随机推荐
- Zookeeper 分布式事务锁的使用
使用Netflix的包 curator-recipes pom文件引入相关依赖 <dependency> <groupId>org.apache.zookeeper</g ...
- InnoDB_锁总结
1. 查询会对资源添加共享锁 加了共享锁的资源不可以被修改:但可以被查询(也是会在资源上再加共享锁) 2. 数据修改会对资源添加排他锁 加了排他锁的资源只能被持有这个排他锁的事务读取和修改,其他事务读 ...
- C语言可以在执行语句中间定义变量吗?
C语言可以在执行语句中间定义变量吗? 例如:for(int i=0; i<5; i++){ ...
- Python数据科学手册-机器学习: 流形学习
PCA对非线性的数据集处理效果不太好. 另一种方法 流形学习 manifold learning 是一种无监督评估器,试图将一个低维度流形嵌入到一个高纬度 空间来描述数据集 . 类似 一张纸 (二维) ...
- Django 之模版层
一.模板简介 将前端页面和Python 的代码分离是一种的开发模式. 为此 Django专门提供了模板系统 (Template System,即模板层)来实现这种模式. Django 的模板 = HT ...
- MySQL读写分离之——ProxySQL
文章转载自:https://blog.csdn.net/u012280685/article/details/113520692?spm=1001.2014.3001.5501 实现一个简单的读写分离 ...
- SCI论文写作指南
目录 科技论文的特点 时态的使用 论文的逻辑结构 作者 选择期刊 写作 Title/论文题名 题名 题名的作用 题名基本要求 作者 作者姓名的拼音表达方式 作者单位名与地址的标署 摘要的写作与关键词 ...
- ExecutorService、Callable、Future实现有返回结果的多线程原理解析
原创/朱季谦 在并发多线程场景下,存在需要获取各线程的异步执行结果,这时,就可以通过ExecutorService线程池结合Callable.Future来实现. 我们先来写一个简单的例子-- pub ...
- 2_CSS
1. 什么是CSS 1.1 什么是CSS Cascading Style Sheet 层叠样式表 是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的 ...
- JS 模块化- 04 CMD 规范与 Sea JS
1 CMD 规范介绍 CMD: Common Module Definition, 通用模块定义.与 AMD 规范类似,也是用于浏览器端,异步加载模块,一个文件就是一个模块,当模块使用时才会加载执行. ...