2019 牛客多校 第一場

2022-06-01 01:30:11 字數 1587 閱讀 5707

a:題意:就是兩個陣列,找最大的p,使對於1到p的所有子區間都保證最小值的下標相同

題解:每次往後加乙個值(第i+1位)都會多出 i 個區間,當a[i+1] 大於max(a[1] ...a[i]) 時沒有影響,當a[i]小於max(a[1] ...a[i])時,因為a[i+1]的加入會導致區間的rmq(l到r 的 最小值的下標)發生變化,

我們只需要在我1-i 的這段區間上從右邊往左找第乙個小於a[i+1]的位置記作pa,此時可以把多出的 i 個區間,分為1-p,和p+1-i,不難想到pa和pb相等的時候,那麼a,b陣列到i+1位(n=1的時候一定滿足,數學歸納法)的時候還是滿足條件的。

解法1:用next陣列做個標記來判斷

#include using

namespace

std;

const

int maxn=2e5+5

;int

a[maxn], b[maxn];

intnexta[maxn], nextb[maxn];

intn, pa, pb;

intmain()

cout

}return0;

}

view code

解法2:用單調棧來判斷

#include using

namespace

std;

const

int maxn=2e5+5

;int

a[maxn], b[maxn], n;

intmain()

cout

} return0;

}

view code

e:題意:求解滿足可以拆成n個「ab」的子串行和m個「ba」子串行的字串數量有幾個?

題解:dp[i][j] 表示i個a j個b的情況,不斷的往原有序列後加入a或者b, 不難想到狀態轉移是: dp[i][j]+=dp[i-1][j](加a)+dp[i][j-1](加b) 

令i-j=k,可發現此時至少會組成k個ab,當k>n的時候就不能再加a了, b同理;

#include using

namespace

std;

const

int maxn=2e3+5

;const

int mod=1e9+7

;int

dp[maxn][maxn];

intmain()

cout

}return0;

}

view code

f:題意:給你乙個三角形的三個點a(x

1,y1

)'>a(x1,y1)

a(x1​,y1​),b(x

2,y2

)'>b(x2,y2)

b(x2​,y2​),c(x

3,y3

)'>c(x3,y3)

c(x3​,y3​)

在三角形abc上找一點p

'>p

,設e=ma

x'>e=max

e=maxsδx

yz'>

現在讓你求e

' id="mathjax-span-93" class="math">

2019牛客多校第一場

看到這裡我還能說什麼呢?自己慢慢證吧 就是這個 而 了 大佬們的結論是 三角形面積的22倍。我.手動膜拜。不會證.while true try x1,y1,x2,y2,x3,y3 map int,input split s abs x1 y2 x2 y1 x2 y3 x3 y2 x3 y1 x1 y...

2019 牛客多校第一場 F

題目傳送門 考場上看到輸出36e,且保證36e是整數,然後想起整點三角形,面積一定是x 2,那麼可以猜出期望是三角形面積的x 18。理性分析,期望肯定大於1 2,不會超過2 3,或者超過一點,於是盲猜一發11 18過了。然後看到了正解,其實好像還挺好算了。不過求圖形期望這種沒什麼經驗,不知道怎麼去討...

2019牛客多校第一場 H XOR

複習線性基複習了好久。這題的關鍵是把異或為0的集合的大小之和轉化為乙個數字會在多少個異或為0的集合 現,然後每個數字的這個值加起來就行。先求乙個線性基,其中插入了r個數字,那麼剩下的n r個數字的任意組合異或都可以由線性基中的一些數異或表示,那麼它們異或起來就為0.考慮線性基外的乙個數字,我先欽定乙...