题目链接;

http://acm.hdu.edu.cn/showproblem.php?pid=5676

题意:

由4和7组成的且4和7出现次数相同的数称为幸运数字,给定n,求不大于n的最大幸运数字。

分析:

可以对于每个数都按位dfs找一发。一旦发现当前位无法满足就回溯,直到找到满足条件的最小的。

也可以先按位dfs把所有结果都找出来存起来,然后对于每个询问直接二分即可。注意边界时会爆long long,注意处理。

代码:

#include<cstdio>
#include<cstring>
char s[50];
int len;
bool found;
int four, seven;
void write(int len)
{
for(int i = 0; i < len/2; i++) printf("4");
for(int i = 0; i < len/2; i++) printf("7");
printf("\n");
}
void dfs(long long ans, long long res, int lens)
{
if(lens == len && !found){
found = true;
printf("%I64d\n", ans);
}
if(found) return;
res = res * 10 + s[lens] - '0';
if(res <= ans * 10 + 4 && four < len / 2){
four++;
dfs(ans * 10 + 4, res, lens + 1);
four--;
res /= 10;
}
if(found) return;
if(res <= ans * 10 + 7 && seven < len / 2){
seven++;
dfs(ans * 10 + 7, res, lens + 1);
seven--;
res /= 10;
}
}
int main()
{
int T;scanf("%d", &T);
while(T--){
scanf("%s", s);
len = strlen(s);
if(len & 1) write(len + 1);
else{
four = seven = 0;
found = false;
dfs(0, 0, 0);
if(!found) write(len + 2);
}
}
return 0;
}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
long long a[100000 + 5];
int tot = 0;
void dfs(int four, int seven, long long ans)
{
if(four == seven) a[tot++] = ans;
if(four < 9) dfs(four + 1, seven, ans * 10 + 4);
if(seven < 9) dfs(four, seven + 1, ans * 10 + 7);
}
int main (void)
{
dfs(0, 0, 0);
int t;cin>>t;
sort(a, a + tot);
while(t--){
long long n;cin>>n;
if(!n) {cout<<47<<endl;continue;}
int res = lower_bound(a, a + tot, n) - a;
if(res == tot) cout<<"44444444447777777777"<<endl;
else cout<<a[res]<<endl;
}
return 0;
}

HDU 5676 ztr loves lucky numbers【DFS】的更多相关文章

  1. hdu 5676 ztr loves lucky numbers(dfs+离线)

    Problem Description ztr loves lucky numbers. Everybody knows that positive integers are lucky if the ...

  2. hdu 5676 ztr loves lucky numbers 打表+二分

    ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  3. HDU 5676 ztr loves lucky numbers (模拟)

    ztr loves lucky numbers 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/I Description ztr ...

  4. hdu 5676 ztr loves lucky numbers

    题目链接:hdu 5676 一开始看题还以为和数位dp相关的,后来才发现是搜索题,我手算了下,所有的super lucky number(也就是只含数字4, 7且4, 7的数量相等的数)加起来也不过几 ...

  5. hdu-5676 ztr loves lucky numbers(乱搞题)

    题目链接: ztr loves lucky numbers  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536/65536 K ( ...

  6. hdu5676 ztr loves lucky numbers(dfs)

    链接 ztrloveslucky numbers 题意 定义幸运数为:只存在4和7且4和7数量相等的数,给出n,求比>=n的最小幸运数 做法 暴力搜出所有长度从2-18的幸运数,因为最多9个4, ...

  7. ztr loves lucky numbers 傻逼的我来了个大模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=5676 这题的正解因该是dfs的,但是有18个位,然后我一算,全排列的话,有18!个啊,那不是很大?但是有很多是相 ...

  8. Codeforces 1036C Classy Numbers 【DFS】

    <题目链接> 题目大意: 对于那些各个位数上的非0数小于等于3的数,我们称为 classy number ,现在给你一个闭区间 [L,R]  (1≤L≤R≤1018).,问你这个区间内有多 ...

  9. hdu 1518 Square 木棍建正方形【DFS】

    题目链接 题目大意: 题意就是输入棍子的数量和每根棍子的长度,看能不能拼成正方形. #include <bits/stdc++.h> using namespace std; int n, ...

随机推荐

  1. ios 团购信息客户端demo(一)

    团购信息客户端,主要整合了ASIHTTPREQUEST,KISSXML,AQGridView,MBProgressHUD这几个主要流行的IOS开发库,我们先来看一下效果图 首先我们新建一个IOS工程, ...

  2. windows 下phpstudy 升级mysql版本5.7

    今天在导入sql文件的时候遇到了sql执行错误.最后找到原因是因为mysql版本过低,导致出错 原因:在执行sql的时候出现了两次CURRENT_TIMESTAMP ,最后得知在5.7版本之前都是不支 ...

  3. (28)zabbix用户宏变量详解macro

    zabbix宏变量让zabbix变得更灵活,变量可以定义在主机.模板以及全局,变量名称类似:{$MACRO},宏变量都是大写的.认识了宏变量,你会感叹zabbix越发的强大. 变量可以用于如下地方: ...

  4. 《offline coolbook》笔记

    https://jakearchibald.com/2014/offline-cookbook/ 在install中对依赖进行缓存 self.addEventListener('install', f ...

  5. 数据结构( Pyhon 语言描述 ) — — 第7章:栈

    栈概览 栈是线性集合,遵从后进先出原则( Last - in first - out , LIFO )原则 栈常用的操作包括压入( push ) 和弹出( pop ) 栈的应用 将中缀表达式转换为后缀 ...

  6. (转)iOS 属性字符串

    富文本的基本数据类型是NSAttributedString.**属性化字符串**(attributed string)是把属性设置到某些字符上的字符串.属性可以是任何键值对,但是为了实现富文本,则通常 ...

  7. C盘清理小技巧

    步骤/方法 1 1  关闭休眠功能,在开始菜单的运行里输入powercfg -h off 指令,关闭休眠,此文件实际大小和物理内存是一样的,大约可以为C盘释放1-3G的空间. 2 2  设置虚拟内存: ...

  8. eclipse错误日志

    一.普通错误:(必现) 1.空指针: 2. 数组下标溢出,越界 3. 数组下标定义为双精度不妥,应该是整数 4. 类型转换错误(与手机分辨率有关) 二.  数据库错误:(必现) 1. 数据库,报错(数 ...

  9. LOGMNR分析redo log和archive log教程

    自Oracle 11g起,无需设置UTL_FILE_DIR就可以使用LOGMNR对本地数据库的日志进行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和归档日 ...

  10. 【Ts 5】Httpclient的应用和封装

    一.基本概述 1.1,什么是Httpclient HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编 ...