2016 ACM/ICPC Asia Regional Dalian Online
I Count Two Three
Time Limit:1000MS Memory Limit:32768KB 64bit
IO Format:%I64d & %I64u
先打表,再排序,最后用lower_bound函数找到最小的大于等于n的数的位置,然后输出即可
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
using namespace std;
int t;
long long n;
long long f[1000000];
int main()
{
scanf("%d", &t);
int cnt = 0;
for(int a = 0; a <= 32; a++)
{
for(int b = 0; b <= 25; b++)
{
for(int c = 0; c <= 20; c++)
{
for(int d = 0; d <= 15; d++)
{
if (a + b + c + d < 50) f[cnt++] = pow(2,a) * pow(3,b) * pow(5,c) * pow(7,d);
}
}
}
}
sort(f, f + cnt);
while(t--)
{
scanf("%lld", &n);
long long tmp = lower_bound(f, f + cnt, n) - f;
printf("%lld\n", f[tmp]);
}
return 0;
}