hdu 5676
題目大意:
已知幸運數的條件爲其十進制的每一位都由
思路:
從小到大枚舉每一位幸運數,二分尋找,特判大於
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#define LL long long
using namespace std;
int cnt = 0;
int a[20];
LL b[68000];
void init()
{
memset(b, 0, sizeof(b));
for (int i = 1; i <= 9; i++)
{
for (int j = 0; j < i; j++)
{
a[j] = 4;
a[j+i] = 7;
}
do
{
LL sum = 0;
for (int j = 0; j < 2 * i; j++)
{
sum = sum * 10 + a[j];
}
b[cnt++] = sum;
} while (next_permutation(a, a + 2 * i));
}
}
int main()
{
init();
int T;
scanf("%d", &T);
while (T--)
{
LL n;
scanf("%lld", &n);
if (n > 777777777444444444LL)
{
printf("44444444447777777777\n");
continue;
}
printf("%lld\n", b[lower_bound(b, b + cnt, n) - b]);
}
return 0;
}