#模拟#U137456 数字

题目

牛牛和他的小伙伴们高高兴兴的吃完了蛋糕,吃完蛋糕之后就到了牛牛和他的小伙伴们最喜欢的环节了——猜数 字,

这次是牛牛的生日,大家决定让牛牛来制定规则,由于牛牛的生日是4月7日,所以牛牛特别喜欢数字4和数字 7,

于是牛牛希望大家说出的数字都只包含这两个数字,但这对经常玩这个游戏的他们来说太简单了,所以牛牛加了 一个条件,

两个数字的数量需要相等,规则制定完了就可以开始游戏了,每次牛牛会喊出一个数字\(n\)

小伙伴们需要 抢先答出最小的不小于\(n\)的满足牛牛的条件的数字,谁先答出来谁就赢了。


分析

如果\(n\)的位数为奇数,输出\(4\dots 47\dots 7\)
如果答案不是\(n\)的位数同样的道理
然后只要遇到小于4的数字直接结束,
遇到4,如果4没填完填4,
否则当遇到\(\leq 7\)的数字且7没填完的话直接结束
否则把能够扔掉的4换成7直接结束,
赛时找到一堆反例hack自己代码,然后拼命填坑,但还有一个坑没填完qwq


代码

#include <cstdio>
#include <cstring>
#define rr register
using namespace std;
int len,mid; char a[100011],s[100011];
inline bool exceed(int len,int mid){
	for (rr int i=1;i<=mid;++i)
	    if (s[i]^55) return s[i]>55;
	for (rr int i=1;i<=mid;++i)
	    if (s[i+mid]^52) return s[i+mid]>52;
	return 0;
}
signed main(){
	while (scanf("%s",s+1)==1){
		len=strlen(s+1),mid=len>>1;
		if (len&1||exceed(len,mid)){
			++mid;
			for (rr int i=1;i<=mid;++i) putchar(52);
			for (rr int i=1;i<=mid;++i) putchar(55);
			putchar(10); continue;
		}
		rr int four=0,seven=0;
		for (rr int i=1;i<=len;++i)
		if (s[i]<52){
			for (rr int j=0;j<mid-four;++j) a[j+i]=52;
			for (rr int j=0;j<mid-seven;++j) a[len-j]=55;
			four=mid,seven=mid; break;
		}else if (four<mid&&s[i]==52) a[i]=52,++four;
		else if (seven<mid&&s[i]<55){
			a[i]=55,++seven;
			for (rr int j=0;j<mid-four;++j) a[j+i+1]=52;
			for (rr int j=0;j<mid-seven;++j) a[len-j]=55;
			four=mid,seven=mid; break;
		}else if (seven<mid&&s[i]==55) a[i]=55,++seven;
		else{
			rr int st=i-1,f=0;
			for (;st;--st){
				if (a[st]==55) f=1;
			    if (a[st]==52&&(f||seven<mid)) break;
		    }
		    if (!st){
		    	a[1]=55,seven=1,four=0;
		    	for (rr int j=1;j<=mid-four;++j) a[j+1]=52;
		    	for (rr int j=0;j<mid-seven;++j) a[len-j]=55;
		    	break;
			}
			a[st]=55,four=0,seven=1;
			for (rr int i=1;i<st;++i)
			if (a[i]^52) ++seven;
			    else ++four;
			for (rr int j=0;j<mid-four;++j) a[j+st+1]=52;
			for (rr int j=0;j<mid-seven;++j) a[len-j]=55;	
			four=mid,seven=mid; break;
		}
		for (rr int i=1;i<=len;++i) putchar(a[i]); putchar(10);
	}
	return 0;
} 
posted @ 2020-10-27 15:04  lemondinosaur  阅读(365)  评论(0编辑  收藏  举报