bupt暑假排位賽(2)

2021-06-22 19:38:10 字數 2364 閱讀 2339

這次訓練的題目,兩道水題(卡資料型別,有好多人不能1a,我也在內),還有3道題,不是很容易。

a. boj0416丁神去谷歌

一道很水的題,因為我剛開始用了sort,t了一次,後來又忘了是什麼原因re了2次

下面簡單分析一下吧,由於是要求b/a的最大值,所以只需要把當前的b/a與之前最大的b/a比較就行,如果相同的話(在這了需要主語,如果你用的是交叉相乘來比較,記得用long long,如果你用的是b/a來比較,在判斷是否相等的時候記得浮點型的精度問題,可以用abs(max-(double)b/a)<=1e-9 之類的式子來判斷,不要直接用等號),再去比較a的大小,由於本身序號就是從小到大的,所以也不用擔心這個了(只要a相等的時候別更新答案就行),說的有點多了,附**吧

#include #include #include #include #include #include #include #define n 100005

using namespace std;

int main()

return 0;

}

c.

boj426 goblin

這個題呀,昨天比賽時有思路(ps:今天想了一上午,發現我的思路是在是太難實現了),最終還是選擇了lyz大神的思路。

題意大概是求n以內(1--n)的數的全排列中,符合交叉排列的情況(即<><><><><>,大於號小於號交叉出現的情況)總共有多少種,結果對p取餘。

我就來說說lyz大神的思路吧,用到了排列組合的思想。

首先,為了方便敘述,我先來給交叉排列的兩種情況命一下名,

假設:第乙個數大於第二個數的情況叫做d情況,第乙個數小於第二個數的情況叫做p情況,對於k個數的排列,我們記d情況共有d[k]種,p情況共有p[k]種,(記              p[0]=p[1]=p[2]=1     那麼,就有d[k]=p[k](至於怎麼來證明,其實很簡單,我們來看兩個圖

所有d情況都可以抽象成左圖圖(w型),所有的p情況都可以抽象成右圖(m型),

對於d情況,可以抽出n個數中的最大數,分別放到各個凸起點(途中紅圈標出),經過一些排列組合的運算,可以得到乙個乙個結果。

同理,對於p情況,可以抽出n個數中的最小數,分別放到各個凹陷點(圖中紅圈標出),根據對稱的特性,就可以得到跟d情況相同的結果。

所以,我們只需考慮一種情況了,我選取的d情況,經過排列組合的運算,很容易得到如下的關係(sigma代表求和符號

d[k]=sigma(d[i[*d[k-1-i]*c[k-1][k-1-i]) (可能看這個式子看不懂,自己推導一下吧,分別把最大的數放到凸起點就可以了,很容易的)

好了,下面附**(ps:被memset坑了好久,也學到了一點,在程式中,你如果開了陣列但是沒有用到,提交時記憶體是不算的,如果你用了memset(a,0,sizeof(a))來初始化陣列,那麼這個陣列就算是全部被使用了。這題中,如果用memset來初始化組合數的儲存陣列,就會超出記憶體限制。算是學到了一點吧!還有就是,如果用動態陣列來做的話,是擦邊過得,我是第一次交1000ms, t了,第二次993ms過了。最後,注意d陣列要用long long,即便不用,運算時也記得轉化一下,否則會wa的)。

#include #include #include #define n 4205

int c[n][n]=;

long long g[n]=;

int n,p;

void init()

;//判斷子節點出現的sg值

int father[n]=;//記錄某個節電的父親節點

int depth[n]=;//記錄「高度」(懶得改了)

int sg[n]=;//對於單個遊戲來說的每個節點的sg值。

int n,m;

void init()//初始化

void solvesg(int now)//now代表當前節點,dfs

//搜到葉子節點,葉子節點對應的高度為0,sg值為0;

for (int i=0;idepth[son])

min=depth[son];//記錄所有子節點中的最小高度(如果當前節點是必敗節點的話用得到)

if (sg[son]==0)//子節點為必敗態

if (max>t;

while (t--)

//動態陣列建樹(單向的)

solvesg(1);//dfs

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

if (maxwin>maxfail)//必勝的遊戲時間長,學姐贏

printf("mengmengda!\n");

else

printf("so sad...\n");

}return 0;

}

e題,好吧,我承認,還沒做,先放放吧!

2014 BUPT 新生排位賽01

a 學姐的桌面 鏈結 思路 水題,有乙個坑就是怎麼輸出 這個字元,當時沒注意到自己的程式沒打這個字元直接交了上去wa了一次。code include include include include include define inf 10000 using namespace std const ...

2014 BUPT 新生排位賽05

a 平方的平均值 思路 超級大水題了,我都無語了,要注意到xi可能取負數,然後就沒什麼問題了,比賽的時候沒有注意到乙個int轉long long 先上wa的 include include include include include include define inf 10000000000 ...

2014 BUPT 新生排位賽04

a 大家一起點外賣 思路 水題,注意負數的情況,注意long long 就能過了。code include include include include include include define inf 100000005 define eps 1e 9 using namespace std...