UVALive 7279 Sheldon Numbers (暴力打表)
Sheldon Numbers
题目链接:
http://acm.hust.edu.cn/vjudge/contest/127406#problem/H
Description
According to Sheldon Cooper, the best number is 73. In his own words,
“The best number is 73. 73 is the 21st prime number. Its mirror, 37,
is the 12th, and its mirror, 21, is the product of multiplying 7 and 3. In
binary, 73 is a palindrome: 1001001, which backwards is 1001001. Exactly
the same.”
Prime numbers are boring stuff, and so are palindromes. On the other
hand, the binary representation of 73 is rather remarkable: it’s 1 one followed
by 2 zeroes, followed by 1 one, followed by 2 zeros, followed by 1 one.
This is an interesting pattern that we can generalize: N ones, followed by
M zeros, followed by N ones, followed by M zeros, etc, ending in either N ones or M zeroes. For 73,
N is 1, M is 2, and there are 5 runs of equal symbols. With N = 2, M = 1 and 4 runs, we would have
the string 110110, which is the binary representation of 54.
Acknowledging Sheldon’s powerful insight, let us introduce the concept of a Sheldon number: a
positive integer whose binary representation matches the pattern ABABAB . . . ABA or the pattern
ABABAB . . . AB, where all the occurrences of A represent a string with N occurrences of the bit 1
and where all the occurrences of B represent a string with M occurrences of the bit 0, with N > 0 and
M > 0. Furthermore, in the representation, there must be at least one occurrence of the string A (but
the number of occurrences of the string B may be zero).
Many important numbers are Sheldon numbers: 1755, the year of the great Lisbon earthquake,
1984, of Orwellian fame, and 2015, the current year! Also, 21, which Sheldon mentions, is a Sheldon
number, and so is 42, the answer given by the Deep Thought computer to the Great Question of Life,
the Universe and Everything.
Clearly, there is an infinite number of Sheldon numbers, but are they more dense or less dense than
prime numbers?
Your task is to write a program that, given two positive integers, computes the number of Sheldon
numbers that exist in the range defined by the given numbers.
Input
The input file contains several test cases, each of them as described below.
The input contains one line, with two space separated integer numbers, X and Y .
Constraints:
0 ≤ X ≤ Y ≤ 2^63
Output
For each test case, the output contains one line, with one number, representing the number of Sheldon
numbers that are greater or equal to X and less or equal to Y .
Notes:
Explanation of output 1. All numbers between 1 and 10 are Sheldon Numbers.
Explanation of output 2. 73 is the only Sheldon number in this range.
Sample Input
1 10
70 75
Sample Output
10
1
##题意:
求区间[X,Y]之间有多少个Sheldon Number:
其二进制表示满足 ABAB...AB 或 ABAB...ABA 的格式.
其中A为连续n(n>0)个1,B为连续m(n>0)个1.
##题解:
一开始尝试打表,并在oeis上找到了序列(不过没公式).
后来换个方向从N和M的角度考虑:
对于一个满足条件的二进制串:如果N和M、长度这三个因素都固定了,那么这个串也就固定了.
所以符合条件的串的个数少于 64^3 个.
依次枚举N、M、长度这三个因素并构造符合条件的数,加入set判重.
实际上符合条件的数只有4810个.
注意:题目的右区间2^63超出了longlong范围,这里要用unsigned longlong. (%llu)
UVA上的题不要再用I64d了,已经被坑好几回了,老是忘.
##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL unsigned long long
#define eps 1e-8
#define maxn 101000
#define mod 100000007
#define inf 0x3f3f3f3f
#define mid(a,b) ((a+b)>>1)
#define IN freopen("in.txt","r",stdin);
using namespace std;
set ans;
void init() {
for(int n=1; n<64; n++) {
for(int m=0; m<64; m++) {
for(int len=1; len<=64; len++) {
if(!((len%(m+n)0) || (len%(m+n)n))) continue;
LL cur = 0;
bool flag = 1;
int i = 0;
while(1) {
if(i >= len) break;
if(flag) {
flag = 0;
cur <<= n;
i += n;
cur += (1LL<<n)-1;
} else {
cur <<= m;
flag = 1;
i += m;
}
}
ans.insert(cur);
}
}
}
}
int main(int argc, char const *argv[])
{
//IN;
init();
int sz = ans.size();
LL l,r;
while(scanf("%llu %llu", &l,&r) != EOF)
{
int Ans = 0;
set<LL>::iterator it;
for(it=ans.begin(); it!=ans.end(); it++) {
if((*it)>=l && (*it)<=r) {
Ans++;
//printf("%d\n", *it);
}
}
printf("%d\n", Ans);
}
return 0;
}
UVALive 7279 Sheldon Numbers (暴力打表)的更多相关文章
- codeforces 9 div2 C.Hexadecimal's Numbers 暴力打表
C. Hexadecimal's Numbers time limit per test 1 second memory limit per test 64 megabytes input stand ...
- HNUSTOJ-1565 Vampire Numbers(暴力打表)
1565: Vampire Numbers 时间限制: 3 Sec 内存限制: 128 MB提交: 20 解决: 9[提交][状态][讨论版] 题目描述 The number 1827 is an ...
- XTU OJ 1210 Happy Number (暴力+打表)
Problem Description Recently, Mr. Xie learn the concept of happy number. A happy number is a number ...
- HDU 1216 Assistance Required(暴力打表)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1216 Assistance Required Time Limit: 2000/1000 MS (Ja ...
- UVA - 13022 Sheldon Numbers(位运算)
UVA - 13022 Sheldon Numbers 二进制形式满足ABA,ABAB数的个数(A为一定长度的1,B为一定长度的0). 其实就是寻找在二进制中满足所有的1串具有相同的长度,所有的0串也 ...
- ACM/ICPC 之 暴力打表(求解欧拉回路)-编码(POJ1780)
///找到一个数字序列包含所有n位数(连续)一次且仅一次 ///暴力打表 ///Time:141Ms Memory:2260K #include<iostream> #include< ...
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...
- HDU 1012 u Calculate e【暴力打表,水】
u Calculate e Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Codeforces 914 C 数位DP+暴力打表+思维
题意 给出一个二进制数\(n\),每次操作可以将一个整数\(x\)简化为\(x\)的二进制表示中\(1\)的个数,如果一个数简化为\(1\)所需的最小次数为\(k\),将这个数叫做特殊的数, 问从\( ...
随机推荐
- [HDOJ4022]Bombing(离散化+stl)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4022 一个图上有n个点,之后m个操作,每次操作一行或者一列.使得这一行或者这一列的点全部消除.每次操作 ...
- Ogre内存池的使用和说明
大家可能会遇到一些Ogre中的内存分配的方面问题,我对这个总结了一下内存分配的方面资料. Ogre在1.7版本后,统一了内存分配策略,提供了内存是否泄漏的跟踪和内存池等比较方便开发的一些策略,目前提供 ...
- Android提供的LruCache类简介
分类: Android开发 2013-02-06 15:26 26733人阅读 评论(10) 收藏 举报 package android.util; import import /** * A cac ...
- CodeForces Round #290 Fox And Dinner
而是Div2的最后一题,当时打比赛的时候还不会最大流.自己能够把它写出来然后1A还是很开心的. 题意: 有n个不小于2的整数,现在要把他们分成若干个圈.在每个圈中,数字的个数不少于3个,而且相邻的两个 ...
- POJ 3211 (分组01背包) Washing Clothes
题意: 小明有一个贤妻良母型的女朋友,他们两个一起洗衣服. 有M种颜色的N件衣服,要求洗完一种颜色的衣服才能洗另外一种颜色. 两人可以同时洗,一件衣服只能被一个人洗. 给出洗每件衣服所用的时间,求两个 ...
- Java Servlet与Applet、CGI、JSP的比较
Java Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面. Java Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启 ...
- hdu 4674 Trip Advisor(缩点+倍增lca)
花了一天半的时间,才把这道题ac= = 确实是道好题,好久没敲这么长的code了,尤其是最后的判定,各种销魂啊~ 题目中给出的条件最值得关注的就是:每个点最多只能在一个环内->原图是由一个个边连 ...
- NSIS 2.0界面快速入门
NSIS 2.0 版本支持定制的用户界面.所谓的 Modern UI(下称 MUI) 就是一种模仿最新的 Windows 界面风格的界面系统.MUI 改变了 NSIS 脚本的编写习惯,它使用 NSIS ...
- Oracle 手工清除回滚段的几种方法
关于回滚段的问题,之前也小整理过一个,参考: Current online Redo 和 Undo 损坏的处理方法 http://blog.csdn.net/tianlesoftware/articl ...
- 延迟加载图片的 jQuery 插件——lazyload.js
lazyload 这个 jQuery 插件,是用来缓冲加载图片的插件.如果一篇文章很长有很多图片的话,下载图片就需要很多时间.而这款插件,会检测你的滚动情况,只有你要看到那个图片的时 候,它才会从后台 ...