CSP S模擬測試69 題解

2022-05-06 19:51:15 字數 2525 閱讀 4399

一如既往的垃圾,又回到了那個場場墊底的自己,明明考場上都想到正解了,但是就是拿不到分,可能是互奶把rp用光了吧以後一定加強訓練**能力。

t1:考場上一直yy矩陣快速冪,雖然自己矩陣快速冪一點都不會還是硬著頭皮yy,發現不可做之後並沒有及時轉化思路,但其實自己預處理的陣列就是正解。

切記:不僅矩陣快速冪是log的,普通快速冪也是2333

然後這題其實很水啊,我們設$dp[i][j]$為前$i$列放$j$個棋子的方案數,然後列舉最後一列放多少個棋子就好了。

轉移方程為$dp[i][j]=\sum$,這樣轉移m列顯然不行,考慮性質,第$i$列和第$i+kn$列的擺放方式一定相同,所以後面的組合數乘還有多少這樣的列就好了即$^+1}$,但這樣的複雜度是$o(n^4logn)$的,發現組合數可以預處理,於是去掉了log

1 #include2

using

namespace

std;

3const

int n=1e5+10,mod=1e9+7;4

#define int long long

5int

n,m,c,fac[n],inv[n];

6int f[105][105*105],pre[105][105*105];7

int min(int a,int

b)10

int qpow(int a,int

b)17

return ans%mod;18}

19int c(int a,int

b)22

signed main()37}

38}39 printf("

%lld

",f[n][c]%mod);40}

41/*

422 3 1

43*/

chess

t2:考場上先想到單調棧,但是後來成功理解錯題意對拍5w組wa0 2333。

如果理解對題意的話單調棧就挺明顯了吧,肯定要找它前面第一各比他大的,那麼答案一定在這段區間中,有乙個比較明顯的貪心就是,最優決策點一定是在,高度最小的那個點,稍想一下就可以明白。

所以在彈棧的時候每次更新,高度最小的下標即可。

對於輸入量大的題,快讀真的很有必要。

1 #include2

using

namespace

std;

3const

int n=1e7+10

;4 pairs[n];

5int

a[n],sta[n],top;

6 inline int min(int a,int b)

7 inline int max(int a,int b)

8 inline int

read()

1415

intmain()ans=max(ans,i-s[i].second+1

);28 sta[++top]=i;29}

30 printf("%d"

,ans);

31 }

array

t3:回滾莫隊裸題。

就維護兩個陣列now1,now2,分別代表x向左向右能伸展的最長連續值域。

分別用x+1,x-1更新。還有就是更新一下這整段區間的左右端點以保證以後更新答案正確,中間的不用更新因為不會在插入了。

當這個區間左端點和上乙個區間左端點不一樣時,直接清空你now1,now2陣列。

做完了之後覺的理解更加深入了。

放個回滾莫隊講解鏈結

1 #include2

using

namespace

std;

3const

int n=1e6+10;4

intblo[n];

5int

sta1[n],sta2[n],top;

6struct

node

11}ask[n];

12int

now1[n],now2[n],a[n],ans[n];

13int

main()

25for(int i=1;i<=n/size+1;++i)

28 sort(ask+1,ask+m+1

);29

int r=0,l=1,res=0;30

for(int i=1;i<=m;++i)

36while(ask[i].r>r)

46 top=0;47

int tmp=res;

48for(int j=ask[i].l;j<=min(ask[i].r,l);++j)

61for(int j=top;j;--j)

65for(int j=ask[i].l;j<=min(l,ask[i].r);++j)

69 ans[ask[i].id]=tmp;70}

71for(int i=1;i<=m;++i) printf("

%d\n

",ans[i]);

72 }

ants

CSP S模擬測試94 題解

高精硬上似乎跑不過,其實可以都取個 log 那麼只需要比較 y times log x 和 sum limits y log i 就好了。includeusing namespace std int t double x,y void work int main 顯然目標區間合法的充要條件是 把位置...

CSP S 模擬測試 51 題解

慣例先看一遍三道題,t1 一開始反應要求割點,但是這是有向圖,肯定不能求割點,康了一下資料範圍,有40 是樹的,還不錯,決定待會在打。看t2 字串題,完了我字串最弱了,肯定只能打暴力了,帶著前兩題都不會的心情,看了t3發現是期望,完了爆0了,在一看,發現是sb原題,還簡單一點,趕緊把t3碼了一遍過大...

CSP S模擬測試50 反思 題解

大部分人都覺得t3是道不可做題去剛t1t2了,於是我就僥倖苟到了前面?這場考試比較成功的就是快速水掉了t1t2的部分分,1h拿到88分起碼為之後硬肝t3上了保險 賽後發現就算t3爆零也能rank15?剩下也就沒什麼了 t3的分完全是時間堆出來的,還有運氣成分。因為當時第乙個a掉了二分答案專題的奶牛健...