HDU 5676 ztr loves lucky numbers【DFS】
题目链接;
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】的更多相关文章
- hdu 5676 ztr loves lucky numbers(dfs+离线)
		
Problem Description ztr loves lucky numbers. Everybody knows that positive integers are lucky if the ...
 - hdu 5676 ztr loves lucky numbers 打表+二分
		
ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
 - HDU 5676  ztr loves lucky numbers (模拟)
		
ztr loves lucky numbers 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/I Description ztr ...
 - hdu 5676 ztr loves lucky numbers
		
题目链接:hdu 5676 一开始看题还以为和数位dp相关的,后来才发现是搜索题,我手算了下,所有的super lucky number(也就是只含数字4, 7且4, 7的数量相等的数)加起来也不过几 ...
 - hdu-5676 ztr loves lucky numbers(乱搞题)
		
题目链接: ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
 - hdu5676 ztr loves lucky numbers(dfs)
		
链接 ztrloveslucky numbers 题意 定义幸运数为:只存在4和7且4和7数量相等的数,给出n,求比>=n的最小幸运数 做法 暴力搜出所有长度从2-18的幸运数,因为最多9个4, ...
 - ztr loves lucky numbers 傻逼的我来了个大模拟
		
http://acm.hdu.edu.cn/showproblem.php?pid=5676 这题的正解因该是dfs的,但是有18个位,然后我一算,全排列的话,有18!个啊,那不是很大?但是有很多是相 ...
 - Codeforces 1036C Classy Numbers 【DFS】
		
<题目链接> 题目大意: 对于那些各个位数上的非0数小于等于3的数,我们称为 classy number ,现在给你一个闭区间 [L,R] (1≤L≤R≤1018).,问你这个区间内有多 ...
 - hdu 1518 Square 木棍建正方形【DFS】
		
题目链接 题目大意: 题意就是输入棍子的数量和每根棍子的长度,看能不能拼成正方形. #include <bits/stdc++.h> using namespace std; int n, ...
 
随机推荐
- Linux文件操作函数
			
creat() 函数 close() 函数 read() 函数 read 函数实际读到的字节数少于要求读的字节数时: 读普通文件,在读到要求字节数之前就到达文件尾: 当从终端设备读,通常一次最多读一行 ...
 - OpenCV2:直方图
			
一.简介 在一个单通道的灰度图像中,每个像素的值介于0(黑色)~255(白色)之间,灰色图像的直方图有256个条目(或称为容器)
 - Spring-2-官网学习
			
spring生命周期回调 结合生命周期机制(官网提供) 1.实现InitializingBean接口重写void afterPropertiesSet() throws Exception;方法 使用 ...
 - 搭建SSI开发框架原理
			
Spring2.5.Struts2.Ibatis开发框架搭建(一) ssi, ibatis 一.框架下载 1.1 Struts2框架 Struts2框架发展于WebWork,现在捐献给了Apach ...
 - ios多线程之NSOperation
			
使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...
 - C++系统学习之三:向量
			
标准库类型vector 定义:vector表示对象的集合,其中所有对象的类型都相同. 访问方式:索引 头文件:<vector> 本质:类模板 NOTE: 模板本身不是类或函数,相反可以将模 ...
 - 【动态规划】poj2353Ministry
			
拓扑序……好些玄妙 Description Mr. F. wants to get a document be signed by a minister. A minister signs a doc ...
 - JS获取单选框checked的value方法
			
; var obj = document.getElementsByTagName("input"); document.getElementById('gender').oncl ...
 - 条款39:明智而审慎地使用private继承(use private inheritance judiciously)
			
NOTE: 1.private 继承意味 is-implemented-in-terms-of(根据某物实现出).它通常比复合(composition)的级别低.但是当derivated class需 ...
 - laravel的安装与启动
			
今天,我就来给大家分享下laravel的安装 https://pkg.phpcomposer.com 这是官网的中国镜像 第一步: 点链接进来执行下面的三条语句 执行完后,查看下当前目录底下有个 c ...