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個珍珠上刻上字母,現在他想知道,如何刻字母可以...