題目描述
給你兩個陣列,乙個aa陣列,長度為n,另乙個是bb陣列,長度為m。
現在問你∏ni=1a[i]!∏i=1na[i]!是否等於∏mi=1b[i]!∏i=1mb[i]!
其中∏∏是連乘符,它表示n個元素的乘積。"!「為階乘運算,表示小於等於該數所有正整數的積,並且規定0!=1。
我們認為階乘運算」!「的優先順序大於連乘運算"∏∏」。
輸入描述:
第一行是乙個正整數t,(1⩽t⩽2∗102)(1⩽t⩽2∗102)表示案例的數目
對於每組案例,第一行是兩個正整數n,m,(1⩽n,m⩽105)(1⩽n,m⩽105)。
接下來一行輸入n個整數a[i],(0⩽a[i]⩽105)(0⩽a[i]⩽105)。
接下來一行輸入m個整數b[i],(0⩽b[i]⩽105)(0⩽b[i]⩽105)。保證n,m的總和不多於2∗1062∗106
輸出描述:
對於每組案例,輸出一行乙個字串,如果∏ni=1a[i]!∏i=1na[i]!等於∏mi=1b[i]!∏i=1mb[i]!,請輸出"equal"。
反之請輸出"unequal"。
示例1輸入
32 1
5 36
4 64 2 3 0
2 3 2 2 1 3
3 45 6 7
3 4 5 6
輸出equal
equal
unequal
說明對於第一組案例:
5! * 3!=1 * 2 * 3 * 4 * 5 * 1 * 2 * 3=720
6!=1 * 2 * 3 * 4 * 5 * 6=720
完全相等。
對於第二組案例:
4! * 2! * 3! * 0!=1 * 2 * 3 * 4 * 1 * 2 * 1 * 2 * 3 * 1=288
2! * 3! * 2! * 2! * 1! * 3!=1 * 2 * 1 * 2 * 3 * 1 * 2 * 1 * 2 * 1 * 1 * 2 * 3=288
完全相等。
對於第三組案例:
5!*6!*7!=435456000
3!*4!*5!*6!=12441600
兩者不等。
不得不說這道題目的要求還真是高啊!
說到底還是自己太弱gei了,有的大佬十幾分鐘就ac了qaq
話不多說了,這道題注意幾個問題:
1.暴力不可取!絕對tle!
2.盡量採用read()快速讀入,因為資料要求比較高
3.階乘運算中數字過大,採用高精度計算麻煩費時間,並且容易tle,最好的方法是取模運算
4.取模盡量取大且為質數,同時要多次取不同的模計算避免誤差!!(個人測試出至少要取四組不同的摸才能ac,5555555qaq一直wa)
剩下就上**了,算是比較好理解的,類似於雙雜湊減少誤差的思想,如下:
#include
#include
#include
#include
using namespace std;
const
int n=
1e6+5;
intread()
while
(ch>=
'0'&&ch<=
'9')
return x*f;
}struct node
void
add1
(int x)
void
add2
(int x)
}c[4];
intmain()
for(
int i=
1;i<=m;i++
) bool flag=true;
for(
int i=
0;i<
4;i++)if
(c[i]
.v1!=c[i]
.v2)
flag=false;
if(flag)
cout<<
"equal"
cout<<
"unequal"
<}return0;
}
小w的a b問題
大家一定都做過各大oj上面不同版本的a b problem,如果現在反過來給你c,請你給我輸出一組a和b,使得a b的和等於c呢?這同樣還是乙個簡單的問題。我們假設某種語言中的32位整形被定義成int 型別,該語言中負整數以二進位制補碼的形式儲存,第32位為符號位,前31位為數值位。例如 1就被儲存...
小w的a b問題
可以利用雜湊對映,但是可以要選擇合適的模數,一開始選擇的是 1e9 7 不行,換成 1e9 9 才可以,或者 2147483587 include using namespace std typedef long long ll const int n 1e5 10 const int mod 1e...
CSS 優化 提高效能的方法
如何提高css效能,根據頁面的載入效能和css 效能,主要總結有下面幾點 1 盡量將樣式寫在單獨的css檔案裡面,在head元素中引用 有時候為了圖方便或者快速搞定功能,我們可能會直接將樣式寫在頁面的style標籤或者直接內聯在元素上,這樣雖然簡單方便,但是非常不利於日後的維護。將 寫成單獨的css...