袁紹的刁難題目及題解

2021-08-20 17:25:57 字數 1417 閱讀 6267

黃巾之亂後,郭嘉到了袁紹的統轄地區,袁紹想給郭嘉乙個下馬威,當時正值他招募將領的時候,於是乎,袁紹就讓郭嘉去替他招募將領。

這時候有很多很多的將領到袁紹處報到(別人家底厚,四世三公哪~~),每個將領的編號依次為1、2、3、……,第i個將領的武力值為3^(i-1)。

袁紹需要我們的郭嘉招納任意個將領,而郭嘉選中的將領有乙個「總武力值」為各個將領的武力值之和。例如:郭嘉這一次招募了第乙個將領和第三個將領,那麼「總武力值」為1+9=10。

袁紹想知道,他可以獲得的第k小的「總武力值」是多少,請你幫助我們的郭嘉告訴袁紹這個第k小的「總武力值」。

從檔案中讀入k,輸出郭嘉能夠獲得的,第k小的「總武力值」。

輸入檔案的第一行為n(n≤100),表示測試資料的組數。

以下n行,每行為乙個k(k ≤ 2147483647)值。

輸出包含n行,每行輸出乙個對應的結果。1 7

【樣例說明】

郭嘉能夠拿到的總武力值從小到大為1、3、4、9、10、12、13……所以第7小的總武力值是13。

對於50%的輸入檔案,有k≤5000。

對於100%的輸入檔案,有k≤2^31-1。

這道題就是乙個找規律!!!

1.暴力做法:把每一種招募方法按順序存到a裡面,接著再輸入k,輸出a[k];

這種方法我並沒有試過,不過分應該不高。而且看大小,暴力模擬應該只能拿50分,優化最多70分(純屬猜測)

2.正解:找規律

我們看看,當k=1時,選第乙個。這樣:

1 3 9 27 81 243

1 0 0 0 0 0

當k=2時,選第二個

1 3 9 27 81 243

0 1 0 0 0 0

當k=3時,選第三個

1 3 9 27 81 243

1 1 0 0 0 0

…… 以此類推,我們可以發現,其實就是將k轉化成二進位制,0就不選,1就選。

**如下:

#include

#include

#include

#include

#include

using

namespace

std;

int i,j,n,l,s;

int a[100001];

long

long x[10001];

long

long ans,k;

inline

int binary(int x) //轉二進位制

return j;

}inline

void power()

}int main()

printf("%lld\n",ans);//用long long 不然會炸

}return

0;}

jzoj senior 1273 袁紹的刁難

1273.袁紹的刁難 recruitment.pas cpp file io input recruitment.in output recruitment.out time limits 1000 ms memory limits 131072 kb description 黃巾之亂後,郭嘉到了袁...

JZOJ 1273 袁紹的刁難

description 黃巾之亂後,郭嘉到了袁紹的統轄地區,結果袁紹想給我們的郭嘉大大乙個下馬威,且正值他招募將領的時候,於是乎,袁紹就讓郭嘉大大去替他招募將領。這時候有很多很多的將領到袁紹處報到 別人家底厚,四世三公哪 每個將領的編號依次為1 2 3 n,第i個將領的武力值為3 i 1 袁紹需要我...

jzoj1273 袁紹的刁難(B組 Day9)

黃巾之亂後,郭嘉到了袁紹的統轄地區,結果袁紹想給我們的郭嘉大大乙個下馬威,且正值他招募將領的時候,於是乎,袁紹就讓郭嘉大大去替他招募將領。這時候有很多很多的將領到袁紹處報到 別人家底厚,四世三公哪 每個將領的編號依次為1 2 3 n,第i個將領的武力值為3 i 1 袁紹需要我們的郭嘉大大招納任意個將...