数学模拟 HDU-4814
来源:互联网 发布:9块9包邮淘宝网 编辑:程序博客网 时间:2024/06/06 01:16
题目地址:https://vjudge.net/problem/HDU-4814
题意很简单:给定一个十进制数,要求输出在(1+sqrt(5))/2进制中的数的表示。
φ + 1 = φ 2 .11(φ) = 100(φ).
由于x的0次幂等于1 所以完全可以把n当成对应的x进制数的个位 现在要做的就是把这个数转化成二进制
题目给出的公式可以在两边同时乘x的若干次幂 那么这两个式子就变成了
x^(i+1) + x^i = x^(i+2)
2 * x^i = x^(i+1) + x^(i-2)
10^9大约是2^30,所以总长度不超高150,直接模拟就好了。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <map>using namespace std;int num[120];int main(){ int n; while(~scanf("%d",&n)) { if(n==1) { puts("1"); continue; } memset(num,0,sizeof(num)); num[60]=n; int tag=1; while(tag) { tag=0; for(int i=0;i<120;i++) { if(num[i]>=2) { int x=num[i]; num[i]=x%2; num[i+1]+=x/2; num[i-2]+=x/2; tag=1; } } for(int i=0;i<119;i++) { if(num[i]>0&&num[i+1]>0) { int m=min(num[i],num[i+1]); num[i]-=m; num[i+1]-=m; num[i+2]+=m; tag=1; } } } int l,r; for(int i=0;i<120&&num[i]==0;i++)l=i; for(int i=119;i>=0&&num[i]==0;i--)r=i; for(int i=r-1;i>l;i--) { printf("%d",num[i]); if(i==60) printf("."); } printf("\n"); }}
阅读全文
0 0
- 数学模拟 HDU-4814
- hdu 4814 Golden Radio Base(数学模拟)
- hdu 1210 简单数学模拟
- hdu 5491 The Next(数学模拟)
- hdu2076 水题数学模拟
- POJ 1019数学模拟题
- SCU2016-05 R题数学模拟
- wikioi之1083 Cantor表数学模拟题
- POJ 1700 cross river (数学模拟)
- CF#305-C. Mike and Frog-数学模拟
- hdoj--2522--A simple problem(数学模拟)
- UVALive 7511 Multiplication Table (数学模拟题)
- hzauoj Problem I: Catching Dogs (数学模拟)
- 3505Yet Another Set of Numbers (数学模拟题)
- CodeForces 321A Ciel and Robot(数学模拟)
- codeforce 492D. Vanya and Computer Game(数学模拟)
- hdoj 无限的路 2073 (数学模拟&预处理&转换)
- CodeForces 321A Ciel and Robot(数学模拟 枚举答案)
- ActiveMQ概述
- Swift基础:将闭包改为逃逸型场景
- linux 命令归纳
- Varnish后端主机的健康状态检查
- mycat limit
- 数学模拟 HDU-4814
- 为什么我的 Android Studio 那么卡
- JQuery遍历之向下遍历
- 1040: 进阶版a+b
- 全局地址池 与接口地址池
- cocos2d学习---世界坐标和本地坐标的转化
- 去除中国夏令时对日期的影响
- Python读取路径下的所有文件
- Java——HashMap<> 四种遍历方式