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 usingview codenamespace
std;
const
int maxn=2e5+5
;int
a[maxn], b[maxn];
intnexta[maxn], nextb[maxn];
intn, pa, pb;
intmain()
cout
}return0;
}
解法2:用單調棧來判斷
#include usingview codenamespace
std;
const
int maxn=2e5+5
;int
a[maxn], b[maxn], n;
intmain()
cout
} return0;
}
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 usingview codenamespace
std;
const
int maxn=2e3+5
;const
int mod=1e9+7
;int
dp[maxn][maxn];
intmain()
cout
}return0;
}
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.考慮線性基外的乙個數字,我先欽定乙...