NOIP模擬 Ball log積化和

2022-06-01 07:33:08 字數 1309 閱讀 8185

alice 與 bob 在玩遊戲。他們一共玩了 t 輪遊戲。遊戲中,他們分別獲得了 n 個和 m 個小球。每個球上有乙個分數。每個人的得分都為他所獲得所有小球分數的乘積,分數小者獲勝。問每輪遊戲誰會獲勝?請輸出每輪遊戲的勝者。資料保證不會出現平局,且兩個人分數差異大於任意乙個人分數的 1% 。

第一行為兩人玩的輪數 t(1≤t≤10)。

每一輪遊戲的輸入中:

第一行乙個整數 n,代表 alice 獲得球的個數。

第二行為 n 個整數 ai,代表 alice 每個球的分數。

第三行乙個整數 m,代表 bob 獲得球的個數。

第四行為 m 個整數 bi,代表 bob 每個球的分數。

輸出共 t 行,每行為該輪勝者的名字「alice」或「bob」。13

2 3 4

41 3 4 5

alice

alice:2 * 3 * 4 = 24

bob: 1 * 3 * 4 * 5 = 60

對於 40% 的資料:n,m,ai,bi≤10;

對於 100% 的資料:1≤n,m≤100000;-10000≤ai,bi≤10000

在精度要求不高的情況下,可以將求積用log化為求和a * b = log(a) + log(b).

此題迎刃而解。

#include#include#include#include#include#include#includeusing namespace std;

const int n = 100005, s = 45000;

int t, n, m;

double a, b;

typedef long long ll;

//#define endll putchar('\n')

inline int read()

inline void wr(ll x)

int main()

if(x < 0) fn *= -1, x = -x;

a = a + log(x);

} m = read();

for(int i = 1; i <= m; i++)

if(x < 0) fm *= -1, x = -x;

b = b + log(x);

}// cout << fn * a << " "<< fm * b;

if(fn * a < fm * b) cout << "alice" << endl;

else cout << "bob" << endl;

} return 0;

}

NOIP模擬 記憶化搜尋 動態規劃 遊戲

題目描述 題目大意 有n個物品排成一排,從左往右第i個價值為a i 有兩個人從左往右輪流取物品。第乙個人可以拿一或兩個物品。如果前乙個人拿了k個,下乙個人只能拿k或k 1個。如果剩下的物品不夠拿,就結束。問如果大家都採取最優策略,那麼先手拿的物品的價值最多能比後手多多少。1 n 20000 樣例輸入...

NOIP模擬 修路

這題第一眼看上去有些懵逼,還以為是dp。第二眼,哦,這麼裸的最小生成樹,2分鐘打完,拍都沒對,自信100分。最終100分。每條邊的權值減去連個節點的權值,所有的邊做一次最小生成樹就好了。include include include include include define fo i,a,b f...

NOIP模擬 項鍊

經過一番周折,bob找到了alice,為了安慰alice驚魂未定的心,bob決定給alice買一條手鍊,這條手鍊由m個珍珠組成,每個珍珠上刻著不同的小寫字母。當alice看到一些字母按照一定的順序排列成的字串時,就會產生一定的愉悅值。bob現在可以在這m個珍珠上刻上字母,現在他想知道,如何刻字母可以...