传送门
题意:找出一个最小的数x,满足两个条件:1. x>=n; 2. x只由4和7组成,并且7和4的个数相等。看到其他一些奇奇怪怪的做法… 默默地跑了一个BFS
#include <set>
#include <map>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <vector>
#include<cstring>
#include <stdio.h>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5+5;
struct node{
ll x;
int a4,a7;
};
ll BFS(ll n,int cnt)
{
queue<node>q;
q.push(node{0,0,0});
cnt/=2;
while (!q.empty()){
node xx=q.front();
q.pop();
if(xx.x>=n&&xx.a4==xx.a7) return xx.x;
q.push(node{(xx.x*10+4),xx.a4+1,xx.a7});
q.push(node{(xx.x*10+7),xx.a4,xx.a7+1});
}
return 0;
}
int main()
{
ll n;
cin>>n;
ll x=n;
int cnt=0;
while (x){
cnt++;
x/=10;
}
if(cnt&1) cnt+=1;
cout<<BFS(n,cnt)<<endl;
return 0;
}