喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!
星星同学今天她抽到的是狼的身份,按照她的一贯玩法,她喜欢无情的屠杀掉所有的神。
她现在已经很清楚了场上的预言家,女巫,猎人是谁。但是她唯一不知道的就是白痴这张神牌在谁的身上。于是她诈一诈她的下家——天行廖。
星星同学的逻辑是这样的:她可以考一道题给天行廖,如果天行廖能够答上来的话,那么天行廖肯定不是白痴,因为白痴是答不上题的。
这道题是这样的:
如果一个数只包含4和7的话,那么这个串就是幸运数,比如4777,774就是幸运数,而467就不是幸运数。
如果一个幸运数中包含的4和7的数量相同的话,那么这个数就是超级幸运数,比如4747就是超级幸运串,447就不是。
现在给你一个n,你需要找到一个最小的超级幸运数,并且这个超级幸运数大于等于n。
本题包含若干组测试数据。
第一行一个整数n。
满足 1<=n<=10^9
输出最小的超级幸运数
47
4747
题解
#include<bits/stdc++.h>
using namespace std;
long long n;
int cnt = 0;
long long ten[13];
map<long long,int>H;
long long ans = 0;
void solve(int a,int b,long long c,int len){
if(H[c])return;
if(c>10000000000LL)return;
if(a==b&&c>=n)ans=min(ans,c);
H[c]=1;
solve(a+1,b,c+ten[len]*4,len+1);
solve(a,b+1,c+ten[len]*7,len+1);
}
void solve(){
H.clear();
cnt = 0;
ans = 10000000000LL;
solve(0,0,0,0);
cout<<ans<<endl;
}
int main(){
ten[0]=1;
for(int i=1;i<13;i++)
ten[i]=ten[i-1]*10LL;
while(cin>>n)
solve();
}