zoukankan      html  css  js  c++  java
  • hdu5878(枚举,打表)

    题目链接:hdu5878

    题意:到一行输入t,表示下面有t组数据,然后下面t行每行输入一个数n;

    定义x==2^a*3^b*5^c*7^d(a, b, c, d为自然数,x不大于1e+9);

    要求对于每一个n输出>=n的最小x;

    思路:由于x比较大,可以先打个表;

    依次枚举a,b,c,d将所有不大于1e+9的x存到数组a中,再用;lower_bound()找一下即可;

    代码:

     1 #include<bits/stdc++.h>
     2 #define MAXN 10000
     3 #define MAX 1000000000
     4 #define eps 1e-6
     5 #define ll long long
     6 using namespace std;
     7 
     8 ll a[MAXN];
     9 
    10 void get_number(void)  //***打表,将所有不大于1e+9的x存数组a中
    11 {
    12     ll flag;
    13     int pos=0;
    14     for(int i=0; pow(2, i)<=MAX; i++)
    15     {
    16         for(int j=0; pow(2, i)*pow(3, j)<=MAX; j++)
    17         {
    18             for(int k=0; pow(2, i)*pow(3, j)*pow(5, k)<=MAX; k++)
    19             {
    20                 for(int l=0; pow(2, i)*pow(3, j)*pow(5, k)*pow(7, l)<=MAX; l++)
    21                 {
    22                     a[pos++]=pow(2, i)*pow(3, j)*pow(5, k)*pow(7, l);
    23                 }
    24             }
    25         }
    26     }
    27 }
    28 
    29 int main(void)
    30 {
    31     std::ios::sync_with_stdio(false), cin.tie(0), cin.tie(0);
    32     ll t, n;
    33     get_number();
    34     sort(a, a+MAXN);
    35     cin >> t;
    36     while(t--)
    37     {
    38         cin >> n;
    39         int pos=lower_bound(a, a+MAXN, n)-a;   //****二分查找第一个大于等于n的数,返回指针;
    40         cout << a[pos] << endl;
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/5893827.html
Copyright © 2011-2022 走看看