洛谷 p2651 新增括號III 思維,數學

2021-10-07 16:32:19 字數 1783 閱讀 7564

題目傳送

題意:

思路:

我們首先想想如何判斷乙個分數是否能約分成整數

判斷方法:

(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 的處理,可以直接想一下找規律 如果乙個右括號能匹配左括號,且左括號的前乙個括號是乙個已經匹配了的右括號,那麼就可以將這兩個序列合併,當前右括號的貢獻等於前乙個右括號...