uva 10479(找规律+递归)
题意:有一个初始序列第一个数字是0。
规律是把前一次推出来的每个数字x。先接x个0,然后接x+1。
0 –> 1 –> 02 –> 1003 –> 02110004
那么这个序列就变成0,1,0,2,1,0,0,3,0,2,1,1,0,0,0,4…
问序列里第n个数字是多少,0 < n < 2^63。
题解:首先能够看出这个序列的第2^k个数字一定是k,然后从第2^k个数字往前看一定是紧接着k-1个0,k-2个1 ,k-3个02。k-4个1003…。一直到k-i为1,把n在k-i这个序列的循环节中位置找到,然后递归下去直到能够确定它的值。
#include <stdio.h>
#include <math.h>
#define ll unsigned long long
ll n, f[65];
void dfs(int r, ll cur, ll len) {
if (cur >= len - (r - 1)) {
printf("0\n");
return;
}
len = len - (r - 1);
for (int i = 1, j = r - 2; j > 0; i++, j--) {
if (cur >= len - j * f[i - 1]) {
cur = ((cur - (len - j * f[i - 1])) % f[i - 1]) + 1;
len = f[i - 1];
if (cur == len)
printf("%d\n", i);
else
dfs(i, cur, len);
return;
}
len = len - j * f[i - 1];
}
}
int main() {
f[0] = 1;
for (int i = 1; i < 64; i++)
f[i] = f[i - 1] * 2;
while (scanf("%lld", &n) == 1 && n) {
int l;
for (int i = 0; i < 64; i++) {
if (n < f[i]) {
l = i - 1;
break;
}
}
if (f[l] == n)
printf("%d\n", l);
else {
int r = l + 1;
dfs(r, n, f[r]);
}
}
return 0;
}
uva 10479(找规律+递归)的更多相关文章
- 紫书 习题 10-22 UVa 10479 (找规律)
自己一直在纠结这个串的构造方法 而没有观察串本身的规律-- 2的63次方用 unsigned long long 然后可以发现串是递归构造的. 将串分成1,1,2,4,8,16, 然后会发现s串里面1 ...
- GCD XOR UVA 12716 找规律 给定一个n,找多少对(a,b)满足1<=b<=a<=n,gcd(a,b)=a^b;
/** 题目:GCD XOR UVA 12716 链接:https://vjudge.net/problem/UVA-12716 题意:给定一个n,找多少对(a,b)满足1<=b<=a&l ...
- 紫书 例题8-12 UVa 12627 (找规律 + 递归)
紫书上有很明显的笔误, 公式写错了.g(k, i)的那个公式应该加上c(k-1)而不是c(k).如果加上c(k-1)那就是这一次 所有的红气球的数目, 肯定大于最下面i行的红气球数 我用的是f的公式, ...
- 求N!末尾的0的个数(找规律+递归)
0\'s Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 计算整数n!(n的阶乘)末尾有多少个0. 输入 第一行输入一个数T代 ...
- C基础之递归(思想很重要,学会找规律)
递归思想的条件:1.函数自己调用自己 2.函数必须有一个固定的返回值(如果没有这个条件会发生死循环) ----规律很重要 简单递归题目一: 设计一个函数计算一个整数的n次方,比如2的3次方,就是8 步 ...
- 【数论,找规律】Uva 11526 - H(n)
原来做过的题再看还是没想出来,看来当时必然没有真正理解.这次回顾感觉理解更透彻了. 网上的题解差不多都是一个版本,而且感觉有点扯.根据n=20猜出来的? 好吧哪能根据一个就猜到那么变态的公式.其实这题 ...
- [Swust OJ 666]--初来乍到(题号都这么溜~~,递归,找规律)
题目链接:http://acm.swust.edu.cn/problem/0666/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- 递推+高精度+找规律 UVA 10254 The Priest Mathematician
题目传送门 /* 题意:汉诺塔问题变形,多了第四个盘子可以放前k个塔,然后n-k个是经典的汉诺塔问题,问最少操作次数 递推+高精度+找规律:f[k]表示前k放在第四个盘子,g[n-k]表示经典三个盘子 ...
- UVa 11774 (置换 找规律) Doom's Day
我看大多数人的博客只说了一句:找规律得答案为(n + m) / gcd(n, m) 不过神题的题解还须神人写.. We can associate at each cell a base 3-numb ...
随机推荐
- iOS沙盒及数据存储
时间久了容易忘,针对沙盒的相关实用技巧做一个记录和整理. 一.iOS数据存储常用方式 1.XML属性列表(plist) 不是所有对象都可以写入: 2.Preference(偏好设置) 本质还是通过“p ...
- android sdk 更新失败问题解决办法
网上几乎都是这么说的 1.设置tools下的options,然后点击菜单packages下的reload 2.然后就会出现列表在点install进行安装 但是在更新时莫名其妙的也会出现错误 解决类似这 ...
- 自己动手丰衣足食,为Zepto添加Slide动画效果
一.缘由 公司的移动端项目,采用zepto为主要框架,但是zepto毕竟是精简版的jquery,体积小了,功能自然没有这么强大,特别是动画和选择器这两块,需要我们自己去拓展. 在项目开发过程中,很多页 ...
- PCB 周期计算采用 SQL 函数调用.net Dll 标量函数 实现
PCB 周期计算采用 SQL函数调用.net Dll实现 (实现代码重用目的) 玩过SQL SERVER数据库经常经需要写存储过程,函数之类的,当业务逻辑过于复杂,用SQL去写简直是恶梦, 这里以PC ...
- JS中对象按属性排序(冒泡排序)
在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据json中某一项进行数组的排序. 例如返回的数据结构大概是这样: { result:[ {id:,name:'中国银 ...
- mybatis+oracle实现一对多,多对一查询
首先创建表 学生表 create table stu( id number(11) primary key, name varchar2(255), age num ...
- 二进制部署Kubernetes-v1.14.1集群
一.部署Kubernetes集群 1.1 Kubernetes介绍 Kubernetes(K8S)是Google开源的容器集群管理系统,K8S在Docker容器技术的基础之上,大大地提高了容器化部署应 ...
- TCP/IP详解(三)
超时与重传: TCP在发送一个包时,启动一个定时器,如果在定时器溢出之前没有收到ACK,则认为发出的包丢失了,此时会重传丢失的包.这就是超时重传. 其中定时器的时间不是一个固定值,它是根据RTT计算的 ...
- 实体 和 XML格式的转换
许多接口传输需要XML格式转换,那么如何实现?看下面帮助类→_→ /// <summary> /// XML处理帮助类,编码格式GBK!! /// </summary> pub ...
- centos下使用shell+expect远程登录主机
# 安装expect yum install expect # 新建脚本文件running #!/usr/bin/expect spawn /usr/bin/ssh root@114.114.114. ...