题目描述

任何一个正整数都可以用222的幂次方表示。例如

137=27+23+20137=2^7+2^3+2^0 137=27+23+20

同时约定方次用括号来表示,即aba^bab 可表示为a(b)a(b)a(b)。

由此可知,137137137可表示为:

2(7)+2(3)+2(0)2(7)+2(3)+2(0)2(7)+2(3)+2(0)

进一步:

7=22+2+207= 2^2+2+2^07=22+2+20 (2^1用2表示),并且

3=2+203=2+2^03=2+20

所以最后137137137可表示为:

2(2(2)+2+2(0))+2(2+2(0))+2(0)2(2(2)+2+2(0))+2(2+2(0))+2(0)2(2(2)+2+2(0))+2(2+2(0))+2(0)

又如:

1315=210+28+25+2+11315=2^{10} +2^8 +2^5 +2+11315=210+28+25+2+1

所以131513151315最后可表示为:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

输入输出格式

输入格式:

一个正整数n(n≤20000)n(n≤20000)n(n≤20000)。

输出格式:

符合约定的nnn的0,20,20,2表示(在表示中不能有空格)

输入输出样例

输入样例#1:

1315
输出样例#1:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

分析:分治,将大问题化为若干个规模相近的小问题。。。从而分而治之。
 #include<iostream>
using namespace std;
int x; int cf(int a,int b){//由于cmath的pow在这里不好用,就手写了一个计算乘方的函数。
int z=;
for(int i=; i<b; i++ ){
z*=a;
}
return z;
} void digui(int n){
int y;
if(n==) return ;
for(int i=; i<=; i++ ){
y=i;
if(cf(,i)>n){
y--;
break;
}
}
if(y==) cout<<"2(0)";
if(y==) cout<<"";
if(y>){
cout<<"2(";
digui(y);
cout<<")";
}
if(n!=cf(,y)){
cout<<"+";
digui(n-cf(,y));
}
}
int main(){
cin>>x;
digui(x);
return ;
}

另外:附加一位不知名的OIer的神奇的代码

 #include<bits/stdc++.h>
using namespace std;
string run(int x,int i=,string s=string("")){
if(x==)return string("");
do
if(x&)s=(i==?"":"2("+run(i)+")")+(s==""?"":"+")+s;//拼接字符串,应题意,要把低次方接在后面
while(++i,x>>=);//每次向右移位
return s;
}
int main(){
int x;cin>>x;
cout<<run(x)<<endl;
}

p1010幂次方---(分治)的更多相关文章

  1. P1010 幂次方 P1022 计算器的改良

    P1010 幂次方 一.题目 https://www.luogu.org/problemnew/show/P1010 二.代码 #include<bits/stdc++.h> using ...

  2. 2021.07.26 P1010 幂次方(数论)

    2021.07.26 P1010 幂次方(数论) [P1010 NOIP1998 普及组] 幂次方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.二进制 题意: 用20 ...

  3. 洛谷 P1010 幂次方 Label:模拟

    题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) ...

  4. 解题笔记-洛谷-P1010 幂次方

    0 题面 题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+ ...

  5. P1010 幂次方 递归模拟

    题目描述 任何一个正整数都可以用22的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20 同时约定方次用括号来表示,即a^bab 可表示为a(b)a(b). 由此可知,13713 ...

  6. 洛谷P1010 幂次方

    题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137137可表示为: 2(7)+2(3)+2( ...

  7. P1010 幂次方(分治)

    https://www.luogu.com.cn/problem/P1010 刚刚看到这个题时,有点懵,如果说这是个数学题 比如说7,应该先求出7 = 4 + 2 + 1; 即先分解出里面应该有最多的 ...

  8. 洛谷 P1010 幂次方

    做了好久,递归拆吧 #include<iostream>#include<cstdio>#include<cmath>using namespace std;int ...

  9. 集训作业 洛谷P1010 幂次方

    这个…… 这个题看上去有点难的样子. 仔细看看,感觉有点简单.啊,是递归啊,正经的看一看,好像是把一个数分成2的几次方的和. 然后余数和比他小的最大的2的次方数如果不是2的一次方或者2的0次方,就继续 ...

随机推荐

  1. Android的Databinding-单向绑定

    两种方式实现观察绑定. 一.POJO类实现android.databinding.Observable,在属性set方法中调用notifyPropertyChanged(BR.lastName); 其 ...

  2. redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error(转)

    redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error   windows下安装Redis第一次启动报 ...

  3. centos7上 docket无权限的问题

    2.4 centos7上 docket无权限的问题,解决方案: https://stackoverflow.com/questions/24288616/permission-denied-on-ac ...

  4. 【JavaScript从入门到精通】第二课 初探JavaScript魅力-02

    第二课 初探JavaScript魅力-02 变量 说起变量,我们不得不提起我们有一部比较古老的电视剧叫<包青天>.包青天有一把非常厉害的宝剑叫“尚方宝剑”,见到尚方宝剑有如见到皇帝.某种程 ...

  5. 通过Nginx反向代理之后客户端验证码session不一致造成无法验证通过的问题解决

    location / { proxy_pass http://127.0.0.1:9080/app/; proxy_cookie_path /app/ /; proxy_cookie_path /ap ...

  6. ROC曲线-阈值评价标准

    ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性 ...

  7. Debug 路漫漫-07

    201811—201903???   1)关于训练参数是复数的问题    ——q_k ^theta   q_k(是item的特征矩阵)中有可能是负数,而指数 theta 如果是含小数点的话,就会产生复 ...

  8. class<T>和 class<?>类型

    ? 表示不确定的java类型. T 表示java类型 Class<T>在实例化的时候,T要替换成具体类Class<?>它是个通配泛型,?可以代表任何类型<? extend ...

  9. Effective Java 第三版——65. 接口优于反射

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  10. slackware在vagrant中使用

    slackware以简洁干净的系统闻名于世,如果你想学习了解linux,那么slackware是一个很好的选择,其他linux不是不好,他们都太复杂了,复杂的你不知道从哪里开始. 所以,还是slack ...