原題:
題意:
有乙個n長陣列,兩兩相加得到乙個n(n-1)/2的陣列,給出這個n(n-1)/2的陣列(排序後),求出原陣列(任意解)
解析:
假設原陣列從小到大為a1,
a2,a
3...
an
a_1,a_2,a_3...a_n
a1,a2
,a3
...
an,它們的和中,最小的一定是a1+
a2
a_1+a_2
a1+a2
,其次是a1+
a3
a_1+a_3
a1+a3
,但是a2+
a3
a_2+a_3
a2+a3
排第幾不知道。
但是,我們知道a2+
a3
a_2+a_3
a2+a3
可以排到的最後面是第n位(前面是a1+
a2..
a1+a
na_1+a_2..a_1+a_n
a1+a2
..a
1+a
n),所以我們列舉a2+
a3
a_2+a_3
a2+a3
的名次,那麼就可以解出a1,
a2,a
3a_1,a_2,a_3
a1,a2
,a3
分別使什麼,我們將這三個數的兩兩之和從原陣列中刪除,那麼此時最小的就是a1+
a4
a_1+a_4
a1+a4
,那麼就得到了a
4a_4
a4;再刪除a
4a_4
a4和前面的數的和,以得到a
5a_5
a5……
在求a 1,
a2,a
3a_1,a_2,a_3
a1,a2
,a3
的時候有個細節,就是不能除二會出錯
#include
using namespace std;
#define ll long long
#define debug(i) printf("# %d\n",i)
int a[
50100];
multiset<
int>s;
multiset<
int>
::iterator it;
int ans[
301]
;bool fin
(int idx,
int n)
}return1;
}int
main()
for(
int i=
3;i<=n;i++
)for
(int i=
1;i<=n;i++)}
}
3675 唐納德先生與假骰子
單點時限 6.0 sec 記憶體限制 1024 mb 嗨,唐納德先生又來了。他又帶了一枚假骰子,這個骰子的各個面的點數依然是 1,2,3,4,5,6,但是六個面向上的概率卻不一定都是 1 6,而變成了 p1,p2,p3,p4,p5,p6。現在它要跟你玩乙個遊戲。首先你也得準備一枚骰子,各個面的點數同...
EOJ 3452 唐納德先生和假骰子
題目描述 在進行某些桌遊,例如 uno 或者麻將的時候,常常會需要隨機決定從誰開始。骰子是一種好方案。普通的骰子有六個面,分別是一點 二點 三點 四點 五點 六點,六面向上的概率相同。由於骰子只能產生六種情況,而實際桌遊時,卻常常有三到四人,所以,我們在擲骰子時,常常採用兩顆骰子,這個 隨機的選擇 ...
EOJ 3452 唐納德先生和假骰子 暴力
題目鏈結 題目意思 給你乙個數字p,代表人數,接著給出你兩個骰子的六個面的數值,現在要你將骰子向上的點數和對人數取餘,得到的餘數分別為0到p 1,現在問你遊戲是否公平。解題思路 數值很小我們就用暴力求出兩個骰子的六個面的點數和,然後對p取餘,看得到的餘數的個數是否一樣,一樣代表遊戲公平,否則遊戲不公...