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, ...
随机推荐
- c语言产生随机数的方法
在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公 ...
- 开源 java 电商系统
shop++是基于spring.springmvc等主流框架开发,参考资料比较全面,上手容易: 比 javashop 代码可读性好. 适合二次开发 6.broadleaf基于spring.Spring ...
- 导出Excel插件——Export-CSV ---20150610
出处:http://bbs.hcharts.cn/thread-99-1-1.html 导出Excel插件——Export-CSV 一.插件信息 插件名:Export-CSV(导出Execl文件) ...
- 661. Image Smoother@python
Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother t ...
- nginx目录结构和配置文件
nginx软件功能模块说明 Nginx软件之所以强大,是因为它具有众多的功能模块,下面列出了企业常用的重要模块. (1) Nginx核心功能模块(Core functionality)nginx核心功 ...
- Dajngo admin
Dajngo admin admin app Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.p ...
- selenium.common.exceptions.WebDriverException: Message: u'unknown error: cannot get automation extension\nfrom unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfeb
Python2.7 selenium3.4.1在使用chrome driver时报错:selenium.common.exceptions.WebDriverException: Message: u ...
- (转)自定义UITabBar
push页面时,可调用hidesBottomBarWhenPushed进行隐藏. 第一步,我们需要一些图片: 各个选项的图标和tabbar的背景图片,最后还要一个透明的1x1像素的图片. 第二步,新建 ...
- H.264编码profile & level控制
背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseli ...
- 【01】git下载和安装的完整过程
[03]下载地址: 有许多种安装方式,主要分为两种,一种是通过编译源代码来安装:另一种是使用为特定平台预编译好的安装包. Git 各平台安装包下载地址为:http://git-scm.com/down ...