NOIP2023年普及組題解

2021-08-28 05:00:47 字數 1862 閱讀 4730

這是第一題:

首先,在做題之前要注意兩個地方:

『e』不一定出現在文字的末尾,也不一定出現在某行的末尾

比賽必須要領先2個球才能獲勝,11:10的比分是不存在的

好了,廢話不多說,直接上**~~~

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=100100;

string s[maxn];

int a[maxn],b[maxn],a2[maxn],b2[maxn];

int n=1,t=1,t2=1;

bool check(int x)

int main()

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

if(s[i][j]=='w')

a[t]++,a2[t2]++;

else

if(s[i][j]=='l')

b[t]++,b2[t2]++;

if((a[t]>=11||b[t]>=11)&&abs(a[t]-b[t])>=2)

t++;

if((a2[t2]>=21||b2[t2]>=21)&&abs(a2[t2]-b2[t2])>=2)

t2++;

//這裡一定要注意是領先兩分才能贏}}

return

0;}

這裡是第二題:

定義 f[0/1][i][j][k]表示左端點在 i,右端點在 j,分成了 k 個部分的最大/最小乘積

最開始做這題開了五層迴圈,內層列舉了一下斷點和斷點兩側分別分成了多少個部分…

後來(抄題解)發現了其實不用列舉兩側分成了多少個部分,因為這會被之前或之後的迴圈列舉到,打個比方:如果列舉到了左端點是 i,右端點是 j,斷點是 k,左邊分成了p 個部分,右邊分成了 q 個部分。 當然,這裡需要的是五重迴圈,這樣做有超時的風險。

所以,我們只需要考慮最後一組數是從哪個地方開始的就好了

好了,道理講完了,直接暴力上**~~~

#include

#include

using

namespace

std;

const

int maxn=0x7fffffff;

int n,m,maxn,minn=maxn;

int qzh[105];

int val[105];

int f[2][105][105][15];

int mod(int x)

void prepare()}}

}for(int i=1;i<=n;i++)

}int main()

prepare();

cout

0;}

p.s這道題有一點尷尬,就是我在做模擬賽的時候偷看了原來的程式,結果被老師看出來了。希望這是第一次,也是最後一次這種情況。(同學們千萬不能像我這樣,在考試的時候是不能翻看東西的,相反,考完試之後,要想盡一切方法去理解自己沒有搞懂的題目,千萬不要本末倒置。。。)

好了,言歸正傳,來到第三題:

說實話,這道題比第二題簡單多了,就是乙個普普通通的卡特蘭數,對於卡特蘭數,大家肯定都熟悉的不能再熟悉了,直接暴力上**~~~

#include

#include

using

namespace

std;

int n,f[20][20];

void prepare()

}}int main()

noip2003普及組 棧

棧 組合計數,卡特蘭數 o n 2 o n 2 o n2 首先任何一種合法的入棧 出棧操作序列都可以得到乙個不同的1 n的排列,因此可以得到的排列總數等於合法入棧 出棧操作序列的個數。該問題等價於求第n nn項cat alan catalan catala n數。在本題中我們使用公式 cnm cn ...

NOIP2003 普及組 桌球

這是一道模擬題。模擬題 使程式按照題目所敘述的方式進行,模擬整個過程。模擬演算法其實就是給你一堆資料,設計程式將整個模擬過程走一遍,然後得出結果。題目怎麼表述的,程式就怎麼執行。所以模擬題對於演算法設計的要求不高,但是需要選擇合適的資料結構來進行模擬。參考 模擬題考驗的是我們的 實現能力,簡單的模擬...

數字遊戲 noip2003普及組

題目描述 丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使...