題目傳送
題意:
思路:
我們首先想想如何判斷乙個分數是否能約分成整數
判斷方法:
(1)我們可以分解分子的質因子和分母的質因子,如果分母的質因子數量和種類數完全被分子的質因子包括,那麼一定可以約分成為整數
(2)如果分母的所有因子都包含在分子的因子中如:10 和 20。10中的1 2 5 10都也是20的因子 。那麼也是可以被約分成為整數
(3)分子與分母的最大公約數為分母本身,那麼也可以判斷
等等…
回歸本題:
假如給了a1 / a2 / a3 … / an
那麼我們可以觀察到a1必然是分子(因為前面沒有數),a2必然會成為分母(如果有超能力可以試試),那麼依據前面的(2)中的判斷方法,我們肯定要使得分子的因子種數盡肯能的多,才機會越大,那麼如何達到最多呢?那麼我們直接a1 / (a2 / a3 / a4 … an),a2後面的數都將成為分子,那麼就使得分子的因子種數最大化,分母的因子種數最小化。但是為了避免打高精,根據(3)我們可以讓a2每次除以其他所有數最大公約數,如果最後為1,那麼說明分母的因子被分子全部包括
ac**
#include
inline
long
long
read()
while
(c >=
'0'&& c <=
'9')
return x*s;
}using
namespace std;
#define newnode (treenode *)malloc(sizeof(treenode))
#define mem(a,b) memset(a,b,sizeof(a))
#define lowbit(x) (x)&(-x)
const
int n =
1e5+10;
const
long
long infinf =
0x7f7f7f7f7f7f7f
;const
int inf =
0x3f3f3f3f
;const
double eps =
1e-7
;const
double eee =
exp(1)
;const
int mod =
1e9+7;
const
double ii =
acos(-
1);const
double pp =
(ii*
1.0)/(
180.00);
typedef
long
long ll;
typedef
unsigned
long
long ull;
typedef pair<
int,
int> pii;
typedef pair piil;
signed
main()
b ==
1? cout <<
"yes"
<< endl : cout <<
"no"
<< endl;
}}
洛谷P1830 轟炸III
題目背景 乙個大小為n m的城市遭到了x次轟炸,每次都炸了乙個每條邊都與邊界平行的矩形。題目描述 在轟炸後,有y個關鍵點,指揮官想知道,它們有沒有受到過轟炸,如果有,被炸了幾次,最後一次是第幾輪。輸入格式 第一行,四個整數 n m x y。以下x行,每行四個整數 x1 y1 x2 y2,表示被轟炸的...
洛谷P1830 轟炸III
題目鏈結 題目背景 乙個大小為n m的城市遭到了x次轟炸,每次都炸了乙個每條邊都與邊界平行的矩形。題目描述 在轟炸後,有y個關鍵點,指揮官想知道,它們有沒有受到過轟炸,如果有,被炸了幾次,最後一次是第幾輪。輸入格式 第一行,四個整數 n m x y。以下x行,每行四個整數 x1 y1 x2 y2,表...
洛谷 P5658 括號樹(DFS)
通過資料範圍可以發現,這個題的複雜度要控制在o n o nlogn 之間。所以對於每一次處理,需要o logn 甚至o 1 對於o 1 的處理,可以直接想一下找規律 如果乙個右括號能匹配左括號,且左括號的前乙個括號是乙個已經匹配了的右括號,那麼就可以將這兩個序列合併,當前右括號的貢獻等於前乙個右括號...