虽然算法清晰的不能再清晰,但是实现总是边角料错这错那。

题目大意:

  给出n,找出一些进制,使得n在该进制下仅为3,4,5,6表示

解题思路:

  首先,4-10000进制直接枚举计算出每一位

  此外,最多只有3位,因为10000进制以上且小于1e12,最多3位,直接枚举每一位计算进制N即可

注意:如果类似我用二分或者直接求二次根式,要开个map储存已经计算出来的N进行判重,虽然数据比较弱可以不用判。最多4^3个吧,多了可能会重。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
#include <stack>
#include <queue>
#include <map>
#include <deque>
#include <cmath>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
using namespace std; long long x,N;
int ans;
int a[];
map<int,bool> mapp; bool check(long long x)
{
if(x<N)
{
if(x>= && x<=) return ;
else return ;
}
for(int i=; i<=min(,N-); i++)
if((x-i)%N== && check((x-i)/N))
return ;
return ;
} void dfs(int p)
{
if(p== || p==)
{
long long l=1e4,r=1e12;
if(p==) r=1e6;
while(l<r-)
{
long long m=(l+r)/;
long long tmp=;
for(int i=; i<=p-; i++)
tmp=tmp*m+a[i];
if(tmp>x) r=m;
else l=m;
}
long long tmp=;
for(int i=; i<=p-; i++)
tmp=tmp*l+a[i];
if(tmp==x && l!=1e4 && !mapp[l])
{
ans++;
mapp[l]=;
}
if(l!=r && r!=1e4)
{
tmp=;
for(int i=; i<=p-; i++)
tmp=tmp*r+a[i];
if(tmp==x && !mapp[r])
{
ans++;
mapp[r]=;
}
}
}
if(p==) return;
for(int i=; i<=; i++)
{
a[p]=i;
dfs(p+);
}
}
int main()
{
//freopen("1003.in","r",stdin);
int tt;
scanf("%d",&tt);
for(int t=; t<=tt; t++)
{
mapp.clear();
scanf("%I64d",&x);
printf("Case #%d: ",t);
if(x>=&&x<=)
{
printf("-1\n");
continue;
}
ans=;
for(N=; N<=; N++)
if(check(x))
ans++;
dfs();
printf("%d\n",ans);
}
return ;
}

hdu 4937 Lucky Number的更多相关文章

  1. 枚举 + 进制转换 --- hdu 4937 Lucky Number

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  2. HDU 4937 Lucky Number(2014 Multi-University Training Contest 7)

    思路:先枚举  a*bas +b = n  求出 bas 在sqrt(n)到n的  (bas>a&&bas>b) 再枚举  a*bas*bas+b*bas+c =n  求出 ...

  3. HDU 4937 Lucky Number (数学,进制转换)

    题目 参考自博客:http://blog.csdn.net/a601025382s/article/details/38517783 //string &replace(iterator fi ...

  4. 2014多校第七场1003 || HDU 4937 Lucky Number

    题目链接 题意 : 给定一个十进制n,让你转化成某个进制的数,让这个数只包含3 4 5 6这些数字,这个进制就成为n的幸运数字,输出有多少幸运数字,例如19,5进制表示是34,所以5是19的一个幸运数 ...

  5. HDU 4937 Lucky Number 规律题_(:зゝ∠)_

    把全部合法的进制打出来会发现合法的进制都是在 n/3 n/4 n/5的边上 然后暴力边上的进制数.. #include <cstdio> #include <set> type ...

  6. HDU 4937 Lucky Number 搜索

    题意: 给你一个数,求在多少种不同的进制下这个数每一位都是3.4.5.6中的一个. 思路: 搜索.枚举这个数在任意进制下的表示,判断是否合法.当数字只有3.4.5.6时,必定有无穷种. 因为数字太大, ...

  7. HDOJ 4937 Lucky Number

    当进制转换后所剩下的为数较少时(2位.3位),相应的base都比較大.能够用数学的方法计算出来. 预处理掉转换后位数为3位后,base就小于n的3次方了,能够暴力计算. . .. Lucky Numb ...

  8. HDU 3346 Lucky Number

    水题 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> us ...

  9. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

随机推荐

  1. Codeforces Gym 100342J Problem J. Triatrip 三元环

    题目链接: http://codeforces.com/gym/100342 题意: 求三元环的个数 题解: 用bitset分别统计每个点的出度的边和入度的边. 枚举每一条边(a,b),计算以b为出度 ...

  2. maven工程的如何进行代码调试

    1.maven项目的父项目右键选择:maven build    注意:       1.选择Browser workspace,让BaseDirectory变成:${***}形式.       2. ...

  3. 微信ios版6.2更新 聊天记录迁移更快捷朋友圈可翻译

    微信iPhone版昨日发布更新,版本号为微信 6.2 for iOS,主要特性有聊天记录迁移.发送图片更快捷.支持朋友圈翻译.手机充值可充流量查余额.可以通过展示二维码来收钱,和ytkah一起来瞧瞧吧 ...

  4. 理解lua 语言中的点、冒号与self

    转载自: http://blog.csdn.net/wangbin_jxust/article/details/12170233 lua编程中,经常遇到函数的定义和调用,有时候用点号调用,有时候用冒号 ...

  5. Candy

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  6. ubuntu安装hadoop2.6

    一:单机版 1.sudo gedit ~/.bashrc 加入JDK路径 #HADOOP VARIABLES START export JAVA_HOME=/usr/lib/jvm/java-1.7. ...

  7. node.js 安装、图文详解

    网上的教程很多,有些模糊不清,有些版本太旧,有些是.exe安装,本文讲述windows系统下简单nodejs .msi环境配置.最新版是Current version: v0.10.26.官网下载地址 ...

  8. java基础知识回顾之java Thread类学习(九)--wait和notify区别

    wait和sleep区别:  相同点:调用wait,sleep方法都可以是线程进入阻塞状态,让出cpu的执行权. 不同点:1.sleep必须指定时间,但是wait方法可以指定时间,也可以不指定时间. ...

  9. Oracle 体系结构2 - 共享和专用服务器

    1. 怎么查看自己的oracle是共享还是专用服务器 2. 怎么修改设置 3.各有什么优缺点 4.适用环境 对于专用服务器,每一个数据库连接,oracle都会分配一个专门的进程为其服务 oracle@ ...

  10. httpclient发送multipart/form-data类型参数和用MultipartRequest接收参数

    一.利用HttpClient发送基于Content-Type="multipart/form-data"形式的表单 package com.test.httpclient; imp ...