HDU 5676 ztr loves lucky numbers (模拟)
ztr loves lucky numbers
题目链接:
http://acm.hust.edu.cn/vjudge/contest/121332#problem/I
Description
ztr loves lucky numbers. Everybody knows that positive integers are lucky if their decimal representation doesn't contain digits other than 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.
Lucky number is super lucky if it's decimal representation contains equal amount of digits 4 and 7. For example, numbers 47, 7744, 474477 are super lucky and 4, 744, 467 are not.
One day ztr came across a positive integer n. Help him to find the least super lucky number which is not less than n.
Input
There are T cases
For each cases:
The only line contains a positive integer . This number doesn't have leading zeroes.
Output
For each cases
Output the answer
Sample Input
2
4500
47
Sample Output
4747
47
题意:
定义super number:
有且仅有4和7两个数字,且两个数字出现的次数相同.
给出n,求最小的不小于n的super number
题解:
xjb打了一通大模拟,结果越打越觉得坑;
还好分清细节后过掉了;
模拟思路:考虑当前数位能是否能放4或7(用strcmp比较后续数);
当两数大小确定后,后面的序列应按最小顺序编排;
另解:
- 直接打表然后二分.
- 用next_permutation获取可能的组合再比较.
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#define LL long long
#define eps 1e-8
#define maxn 3100
#define inf 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;
char num[25];
int cnt;
int main(int argc, char const *argv[])
{
//IN;
//freopen("out.txt","w",stdout);
// printf("%d\n", 1000000);
// for(int i=1; i<=1000000; i++)
// printf("%d\n", i);
int t; cin >> t; getchar();
//int t = 0;
while(t--)
{
LL n=0,cmps=0;
char c;
cnt = 0;
memset(num,0,sizeof(num));
gets(num);
for(int i=0; i<strlen(num); i++) {
if(num[i]<'0' || num[i]>'9') break;
cnt++;
n = n*10 + num[i] - '0';
}
num[cnt] = 0;
if(cnt&1) {
for(int i=1; i<=(cnt+1)/2; i++) printf("4");
for(int i=1; i<=(cnt+1)/2; i++) printf("7");
printf("\n");
continue;
}
for(int i=1; i<=cnt/2; i++) cmps = cmps*10 + 7;
for(int i=1; i<=cnt/2; i++) cmps = cmps*10 + 4;
if(cmps < n) {
for(int i=1; i<=(cnt+2)/2; i++) printf("4");
for(int i=1; i<=(cnt+2)/2; i++) printf("7");
printf("\n");
continue;
}
char ans[25] = {0};
int si=cnt/2,qi=cnt/2;
for(int i=0; i<cnt; i++) {
if(num[i]<'4') {
if(si) ans[i] = '4', si--;
else ans[i] = '7', qi--;
for(int j=0; j<=i; j++) printf("%c", ans[j]);
while(si--) printf("4");
while(qi--) printf("7");
printf("\n");
break;
}
if(num[i] == '4') {
char tmp[25] = {0};
for(int j=0; j<qi; j++) tmp[j] = '7';
for(int j=qi; j<qi+si-1; j++) tmp[j] = '4';
if(!si || strcmp(tmp,num+i+1) < 0) {
ans[i] = '7'; qi--;
for(int j=0; j<=i; j++) printf("%c", ans[j]);
while(si--) printf("4");
while(qi--) printf("7");
printf("\n");
break;
}
if(strcmp(tmp,num+i+1) == 0) {
ans[i] = '4'; si--;
for(int j=0; j<=i; j++) printf("%c", ans[j]);
printf("%s",tmp);
printf("\n");
break;
}
ans[i] = '4'; si--;
continue;
}
if(num[i] == '7') {
char tmp[25] = {0};
for(int j=0; j<qi-1; j++) tmp[j] = '7';
for(int j=qi-1; j<qi+si-1; j++) tmp[j] = '4';
if(!qi || strcmp(tmp,num+i+1) < 0) {
for(int i=1; i<=(cnt+2)/2; i++) printf("4");
for(int i=1; i<=(cnt+2)/2; i++) printf("7");
printf("\n");
break;
}
if(strcmp(tmp,num+i+1) == 0) {
ans[i] = '7'; qi--;
for(int j=0; j<=i; j++) printf("%c", ans[j]);
printf("%s",tmp);
printf("\n");
break;
}
ans[i] = '7'; qi--;
continue;
}
ans[i] = '7'; qi--;
for(int j=0; j<=i; j++)
printf("%c", ans[j]);
while(si--) printf("4");
while(qi--) printf("7");
printf("\n");
break;
}
//printf("\n");
}
return 0;
}
HDU 5676 ztr loves lucky numbers (模拟)的更多相关文章
- 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
题目链接:hdu 5676 一开始看题还以为和数位dp相关的,后来才发现是搜索题,我手算了下,所有的super lucky number(也就是只含数字4, 7且4, 7的数量相等的数)加起来也不过几 ...
- HDU 5676 ztr loves lucky numbers【DFS】
题目链接; http://acm.hdu.edu.cn/showproblem.php?pid=5676 题意: 由4和7组成的且4和7出现次数相同的数称为幸运数字,给定n,求不大于n的最大幸运数字. ...
- hdu-5676 ztr loves lucky numbers(乱搞题)
题目链接: ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- ztr loves lucky numbers 傻逼的我来了个大模拟
http://acm.hdu.edu.cn/showproblem.php?pid=5676 这题的正解因该是dfs的,但是有18个位,然后我一算,全排列的话,有18!个啊,那不是很大?但是有很多是相 ...
- hdu5676 ztr loves lucky numbers(dfs)
链接 ztrloveslucky numbers 题意 定义幸运数为:只存在4和7且4和7数量相等的数,给出n,求比>=n的最小幸运数 做法 暴力搜出所有长度从2-18的幸运数,因为最多9个4, ...
- HDU 5677 ztr loves substring(Manacher+dp+二进制分解)
题目链接:HDU 5677 ztr loves substring 题意:有n个字符串,任选k个回文子串,问其长度之和能否等于L. 题解:用manacher算法求出所有回文子串的长度,并记录各长度回文 ...
- HDU 5675 ztr loves math (数学推导)
ztr loves math 题目链接: http://acm.hust.edu.cn/vjudge/contest/123316#problem/A Description ztr loves re ...
随机推荐
- 02-语言入门-02-ASCII码排序
题目地址: http://acm.nyist.net/JudgeOnline/problem.php?pid=4 描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个 ...
- Android动画效果translate、scale、alpha、rotate
overridePendingTransition只支持android 2.0以上版本,动画效果在anim目录下的xml文件中定义,在程序中用AnimationUtils.loadAnimation( ...
- hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)
题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...
- word编辑器解码集合
$(document).ready(function () { $(".content").each(function () { var content = $(this).htm ...
- bzoj2791
每个顶点有且仅有一条出边是什么意思呢 类似一棵树,树上的边都是由儿子指向父亲的,并且这个东西带着一个环 也就是一个个有向环套有向树…… 这题还是比较简单的,把环作为根然后类似lca做即可,注意细节的p ...
- Only one instance of a ScriptManager can be added to the page.
一般出现在一个页面用了多个用户控件,而每个用户控件中都用到了ScriptManager,最好的办法是控件中不要加上 <asp:ScriptManager ID="Scr ...
- SpringMVC——注解的使用与结果跳转方式
1.项目结构 2.源代码 package com.zhengbin.controller; import java.io.IOException; import javax.servlet.Servl ...
- 【JSP】三种弹出对话框的用法实例
对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3: 一个带输入的对话框,可以返回用户填入的 ...
- GCC 编译优化指南
转自: http://www.jinbuguo.com/linux/optimize_guide.html GCC 编译优化指南 作者:金步国[www.jinbuguo.com] 版权声明 本文作者是 ...
- ie对行高line-height的诡异解释
切 游戏页面真地是要求太精细了,做按钮的时候我犯了一个错误,居然用span的内联元素的行高和padding来控制,虽然有很多好处,但是IE对 line-height的解释导致按钮经常下边会缺一小部分, ...