Codeforces Round #520 (Div. 2) B. Math 唯一分解定理+贪心
题意:给出一个x 可以做两种操作 ①sqrt(x) 注意必须是完全平方数 ② x*=k (k为任意数) 问能达到的最小的x是多少
思路: 由题意以及 操作 应该联想到唯一分解定理 经过分析可以知道 ②操作最多使用一次 将x分解成一系列素数乘积的时候 只要看最高幂次离哪个二的幂近(只取上界)
并且把所以素因子都凑成找到的这个二的幂 只要x*=k一步就可以凑成 然后一直操作①模拟即可 而如果刚好全部都相等并且都是2的幂次 那么直接一直操作①模拟即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+;
int fac[maxn],mi[maxn];
int solve(int x){
ll tmp=;
for(int i=;;i++){
if(tmp>=x){
return i;
}
else tmp<<=;
}
}
map<ll,int>mp;
int main(){
int n;
scanf("%d",&n);
ll la=;
for(int i=;i<=;i++){
la<<=;
if(la>)break;
mp[la]=;
}
if(n==){
cout<<<<" "<<<<endl;
return ;
}
int flag=;
long long ans=;
for(int i=;i<=n;i++){
if(n%i==){
fac[flag]=i;
ans*=i;
while(n%i==){
n/=i;
mi[flag]++;
}
flag++;
}
}
int maxnum=;
int cnt=;
int ok=;
for(int i=;i<flag;i++){
maxnum=max(maxnum,mi[i]);
if(mp[mi[i]]!=)ok=;
if(i>&&mi[i]!=mi[i-])ok=;
}
if(maxnum==){
cout<<ans<<" " <<<<endl;
return ;
}
if(maxnum&)maxnum++;
if(ok)cnt++;
// cout<<maxnum<<endl;
cnt+=solve(maxnum);
cout<<ans<<" "<<cnt<<endl;
return ;
}
Codeforces Round #520 (Div. 2) B. Math 唯一分解定理+贪心的更多相关文章
- Codeforces Round #520 (Div. 2) B. Math
B. Math time limit per test:1 second memory limit per test:256 megabytes Description: JATC's math te ...
- Codeforces Round #520 (Div. 2) B math(素数因子的应用)
题意: 给出一个n ; 有两个操作: 1,mul A , n=n*A : 2,sqrt() , n=sqrt(n) 开更出来必须是整数 : 求出经过这些操作后得出的最小 n , 和 ...
- Codeforces Round #520 (Div. 2)
Codeforces Round #520 (Div. 2) https://codeforces.com/contest/1062 A #include<bits/stdc++.h> u ...
- Codeforces Round #297 (Div. 2)C. Ilya and Sticks 贪心
Codeforces Round #297 (Div. 2)C. Ilya and Sticks Time Limit: 2 Sec Memory Limit: 256 MBSubmit: xxx ...
- CF每日一练 Codeforces Round #520 (Div. 2)
比赛过程总结:过程中有事就玩手机了,后面打的状态不是很好,A题理解错题意,表明了内心不在状态,B题想法和思路都是完全正确的,但是并没有写出来,因为自己代码能力不强,思路不是特别清晰,把代码后面写乱了, ...
- Codeforces Round #520 (Div. 2) E. Company(dfs序判断v是否在u的子树里+lca+线段树)
https://codeforces.com/contest/1062/problem/E 题意 给一颗树n,然后q个询问,询问编号l~r的点,假设可以删除一个点,使得他们的最近公共祖先深度最大.每次 ...
- Codeforces Round #520 (Div. 2) Solution
A. A Prank Solved. 题意: 给出一串数字,每个数字的范围是$[1, 1000]$,并且这个序列是递增的,求最多擦除掉多少个数字,使得别人一看就知道缺的数字是什么. 思路: 显然,如果 ...
- Codeforces Round #520 (Div. 2) D. Fun with Integers
D. Fun with Integers 题目链接:https://codeforc.es/contest/1062/problem/D 题意: 给定一个n,对于任意2<=|a|,|b|< ...
- Codeforces Round #520 (Div. 2) C. Banh-mi
C. Banh-mi time limit per test:1 second memory limit per test:256 megabytes 题目链接:https://codeforc.es ...
随机推荐
- Activity与DialogFragment交互的方法
今天我们来讨论一下如何在Activity与DialogFragment交互的方法,这里包括了DialogFragment的启动以及Activity方法的调用. DialogFragment与Dialo ...
- C# 默认访问权限
声明类.方法.字段.属性时不加访问权限修饰符时的访问权限是什么呢?1. 声明命名空间.类,前面不加限制访问修饰符时,默认访问权限为internal——访问仅限于当前程序集. 2. 声明类成员(域.属性 ...
- 【Oracle学习笔记】索引
1 简介 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引.在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息. ...
- 程序员50题(JS版本)(八)
程序36:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人推出圈子,问最后留下的是原来第几号的那位 var n=20; var arr=[]; for(var i=0;i& ...
- Java自增和自减操作符——++/--的那些事
1. 概述 自增操作符(++)和自减操作符(--)是对变量进行加1和减1的操作. 2.分类说明 ++和--是对变量进行自增1和自减1的简写操作符.许多编程任务中经常需要对变量加1或者减1,所以采用这两 ...
- python的学习笔记__初识函数
函数定义与调用 #函数定义 def mylen(): """计算s1的长度""" s1 = "hello world" ...
- 生鲜配送管理系统_升鲜宝供应链系统V2.0 设计思想及主要模块,欢迎大家批评指点。
前言: 经过这几年的开发,升鲜宝生鲜供应链系统管理软件,终于完成C/S与B/S二个版本的开发,先主要介绍B/S版本的功能,C/S版本的功能更加完善. 升鲜宝供应链系统主要由以下几个主要端组成: ...
- Oracle字符到数值转换错误
[错误] [问题分析] line 3: 定义 NUM_VAL varchar2(500); line 9: NUM_VAL := 'NUM'+1; NUM_VAL是一个varchar类型的数据,而在数 ...
- 安卓开发:初识Android Studio
配置:Android Studio3.2.0,gradle-4.6 ,windows10 一.Android Studio安装 在http://www.android-studio.org/完成下载 ...
- C++,std::shared_future的使用
今天给大家分享一个类似多线程任务的方法,具体如下: std::shared_future<int> tmp = std::async(p1,p2,p3); int tmpInt = tmp ...