インターバル電源の数

フェイス質問

「Lを、R、[L、R]の範囲内の小から大出力にK、くださいすべては、kの全て非負整数累乗の数として表すことができる。与える」
データの複数のセットを。
」、
XXXは、追加しました
「すべての数字は、ああ、そのためにも列挙されている1 0番目、1であることに注意してください。」

エントリー

数Tの最初の行は、データセットの数を表します。
次T線、各ライン番号3 L、R、K、データのセット。

輸出

データ出力線(T総出力ライン)の各セットのために。
要件を満たすために数が少ないから、これらの数値の大出力に行に、存在しない場合は、そうでない場合、文字列の出力
(引用符なし期間を含む)が「なし」。

サンプル

サンプル入力1
。4
。1 2 10
2 4 5
19562 3,170,268,972,017,701
368,037,745,933,600 10
の出力例。1
1 2 8 4
なし
313 325 401
10000 100000 1000000 10000000 100000000 1000000000 10000000000

データ説明

すべてのデータに対して、T≤10000、Lの≤のR 、0≤L、R、K <2 63。
サブタスク1(20点)
:R&LT - 900≤L。
2つのサブタスク(30ポイント)
:Lは、R、K <2 31です。
3つのサブタスク(50ポイント)
:Lは、R、K <2 63です。
ここでサブタスクはテストに縛られない、データ型を示します。
三サブタスク、10個のデータ点の各々 、および満たすT = 10のデータはランダムです。
特別な注意:この問題では0 0電源も1と見られています。

良い質問の解放コードのペア。

コード

#include <cstdio>
#include <vector>
#define ll long long
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
inline ll read(){
    ll x=0,f=1;char c=getchar();
    while (c>'9'||c<'0') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') {x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    return x*f;
}
ll l,r,k;
void work(){
    l=read(),r=read(),k=read();
    vector <ll> v(0);//初始化
    if (k==0){//特判0 1的情况
        if (l<=0&&0<=r) v.push_back(0);
        if (l<=1&&1<=r) v.push_back(1);
    }
    else if (k==1){
        if (l<=1&&1<=r) v.push_back(1);
    }
    else{
        for (ll i(1);;i*=k){
            if (l<=i&&i<=r) v.push_back(i);
            if (r/i<k) break;//i*k可能longlong溢出 所以加个特判
        }
    }
    if (v.empty()) puts("None.");
    else{
        for (int i(0);i<v.size();++i) printf("%lld ",v[i]);
        puts("");
    }
}

int main(){
//  file("dynamic");
    ll t=read();
    while (t--) work();
    return 0;
}
//下文忽视
/*ll l,r,k,flag;
void init(){
    l=read(),r=read(),k=read();
}

void doit(){
    int flag=0;
    for (ll i(1);;i*=k){
        if (l<=i&&i<=r) flag=1,printf("%lld ",i);
        if (r/i<k) break;
    }
    if (flag==0) printf("None.");
    puts("");
}

int main(){
//  file("dynamic");
    ll t=read();
    while (t--){
        init();
        flag=0;
        if (k==0){
            if (l<=0&&0<=r) flag=1,printf("0 ");
            if (l<=1&&1<=r) flag=1,printf("1");
            if (!flag) printf("None.");
            puts("");
        }
        else if (k==1){
            if (l<=1&&1<=r) flag=1,puts("1");
            if (!flag) printf("None.");
            puts("");
        }
        else doit();
    }
    return 0;
}
*/这是水逼做法,无优化无动脑细节

おすすめ

転載: www.cnblogs.com/cancers/p/11565103.html