题目链接

题目大意:

给你两个整数n, m。你需要求一个数,它满足如下条件:

  1. 是n的整数倍,且倍数小于m。
  2. 你应该使其末尾的0尽可能的多(如100后面有2个零,1020后面有一个零,我们应该输出100),在相同的情况下应该保证其最大化。
  3. 如果不能找到末尾有零的数就输出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 不要在一个地方死磕
*/

最新文章

  1. bzoj1036--树链剖分
  2. java使用poi包将数据写入Excel表格
  3. struts2中用xml配置文件去验证填写信息
  4. Fiddler-008-简单模拟性能测试
  5. php类与对象简单操作
  6. (转)Unity3d中的属性(Attributes)整理
  7. 2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)
  8. Mysql数据库导入命令Source详解
  9. Hadoop中java.lang.ClassCastException: partition解决方法
  10. Prime Land
  11. QT美化界面的文章(真的很美)
  12. Yougth的最大化(好题,二分查找 0 1分数规划)
  13. sqlite在c++中的使用方法
  14. 从零开始学C++之RTTI、dynamic_cast、typeid、类与类之间的关系uml
  15. vue路由表(简单)
  16. AFNetworking详解和相关文章链接
  17. UEditor1.2.6.0在.net环境下使用
  18. 项目管理利器maven学习笔记(一):maven介绍及环境搭建
  19. 异常处理汇总 ~ 修正果带着你的Code飞奔吧!
  20. store.state

热门文章

  1. Python实现XMind测试用例快速转Excel用例
  2. Docker_构建_运行总结
  3. selenium爬取图片
  4. Python数据科学手册-Numpy数组的计算:比较、掩码和布尔逻辑,花哨的索引
  5. uniapp scroll-view组件隐藏滚动条
  6. Django ORM 实现数据的多表 增删改查
  7. 关于使用kubeoperator搭建k8s集群使用containerd作为容器运行时,从自己搭建的habor仓库拉取镜像的有关说明
  8. 从 Yum 更新中排除特定/某些包的三种方法
  9. Ceph 有关知识简介
  10. krew插件安装