第四屆山東省省賽題解

2022-05-09 02:33:09 字數 4018 閱讀 4592

幾何

給你等邊三角形的兩個點a和b,求第三個點c的座標;

且abc是逆時針的;

因為要求abc是逆時針的,所以可以直接用b繞a逆時針旋轉60°;

這裡有個通用的公式,證明稍微複雜,可以加到模板裡以備不時之需:

點(x1,y1)繞點(x2,y2)逆時針旋轉a角度後新的座標(x,y)為:

x=(x1-x2)*cos(a)-(y1-y2)*sin(a)+x2;

y=(x1-x2)*sin(a)+(y1-y2)*cos(a)+y2;

如果直接按照題意的等邊三角形的情況去畫圖推導也可以推導出來,不過這個公式比較普適。

#include #include 

#include

#include

#include

#include

using

namespace

std;

intmain()

return0;

}

有n個點、m條邊,問是否任意兩個點都是聯通的

對每乙個點進行bfs,記錄下所有與其聯通的點,若最後所有點互相聯通

輸出kalimdor is just ahead,否則輸出另乙個。

ps:兩個點聯通不需要相鄰

pss:若用鄰接矩陣儲存會超時,此處使用vector優化

#include #include 

#include

#include

#include

using

namespace

std;

#define n 2020

intvis[n],ans[n][n];

vector

path[n];

intm,n;

void bfs(int

s) }

}bool

f()int

main()

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

bfs(i);

if(f())

printf(

"case %d: kalimdor is just ahead\n

",j);

else

printf(

"case %d: the burning shadow consume us all\n

",j);

}return0;

}

大冪的分解和、打表

給出七個整數n,a,k,a,b,m,p和函式f(x),定義如下:

f(x)= k,x = 1

f(x)=(a * f(x-1)+ b)%m,x> 1

計算:( a^(f(1)) + a^(f(2)) + a^(f(3)) + ...... + a^(f(n)) ) % p.

用快速冪會超時,所以用陣列儲存f(x)的值,計算的時候直接去取。

將f(x)分解為a*k+b,再利用x^(a+b)=x^a * x^b,即可。

#include #define max 3333

long

long

t,n,a,k,a,b,m,p;

long

long l1[max+10], l2[max+10

];void

l()int main(void

) printf(

"case #%d: %lld\n

", cas, sum);

cas++;

}return0;

}

求滿足以某元素為中心,左邊遞增右邊遞減的子串數目

ps:最小長度為3,切中心元素左右至少各乙個元素

pps:aaba中,前兩個a是不同的有a1ba、a2ba兩個答案

求出每個字元為中心的左側遞增子串行和右側遞減子串行

然後左右相乘求和

#include #include 

#include

using

namespace

std;

#define max 100010

char

ch[max];

intn,a[max],dp1[max],dp2[max],dp[max];

intmain()

memset(dp,

0, sizeof

(dp));

for(int i = n-1; i >= 0; i--)

int ans = 0

;

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

ans = (ans+dp1[i]*dp2[i])%2012

; cout

<< ans <

}return0;

}

規律  二進位制

求:(a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1)

展開式中x^q的係數。

首先,看到資料範圍就可以猜測這應該是道規律題。

然後,觀察x的指數:2^0  2^1 ... 2^(n-1),可以聯想到二進位制

將樣例3、4寫成二進位制的形式

3  =  1   1

a1  a0

4  =  1   0   0

a2  a1  a0

另外發現展開式中的x的指數沒有相同的項,即不會合併同類項

規律:結果為二進位制為1的位置對應的係數相乘

#include int main(void

)

if(p%2

) res = (res * s[j]) % 2012

; j++;

p /= 2

; }

printf(

"%lld\n

", res);}}

return0;

}

概率dp/數學期望

乙個金字塔,從頂端往下走,規定只能向左、左下、右下走,給你對應的概率,求從頂端走到最底層的左下角那個房間的期望。

輸入層數n還有五個浮點數a,b,c,d,e;

當只有乙個房間的時候,概率是1;

當沒有左,只有左下和右下的時候,概率是a和b;  a+b=1;

當左,左下,右下都有的時候,概率是c,d,e;          c+d+e=1;

綜合思想是:從左下角往頂端倒推;

期望基本公式:

期望基本性質:

#include #include 

#include

#include

#include

#include

using

namespace

std;

intmain() ;

for(int i=n-1;i>0;i--)

for(int i=n-1;i>0;i--)

printf(

"%.2lf\n

",dp[1][1

]); }

return0;

}

水題模擬

一開始印表機能列印s張,每一隊有需要列印的紙張數目,如果該隊列印完則到下一隊,如果該隊列印過程中紙張用完,則新的紙張會到達,而新紙張的數目是在原紙張本來數目上進行s=(s*x+y)%mod的運算,新紙張來後,列印序列必須從0開始,輸出此過程;

直接模擬;

ps:0張也是可以輸出的;

#include #include 

#include

using

namespace

std;

struct

node

team[

105];

intmain()

else

} }

printf("\n

");

} return

0;

}

第六屆山東省省賽題解

給出n個人的身高和體重 要求按身高排序後 奇數序號的人一隊,偶數序號的人一隊 體重大的一隊獲勝 水題,考察點是結構體的排序 要注意的是變數的初始化以及資料型別的精度和輸入 struct node a 110 bool cmp node a,node b intmain sort a,a n,cmp ...

2015山東省省賽總結 by Merc A

說說今年省賽吧。從週六開始去山科大開始,其實一開始我以為是去石油的,結果都跟那邊同學說好了,又被人白白鄙視了一頓,題外話。吹了一路的海風導致晚上七點就昏昏欲睡,跟隊長在房裡睡到八點,然後我就找大腦袋跟鶴爺出去逛 這倆貨出門買了點吃的轉身就回去爐石了,真是。晚上劉老師還給我們說了一下明天的注意。以及白...

2023年第九屆山東省省賽比賽總結

這次比賽是一場極其失敗的比賽。至於題目什麼問題我就不說了。反省一下我們自己的問題 1 沒有把所有題目讀完。d題據說也是資料有問題,可以做的,然而這場比賽我們只有這道題沒讀。2 強制否定g題。雖然g題想想可能出來,但是乙個隊友說做不了,我們兩個人就想都沒想看別的題去了,侷限於乙個人的想法,但其實g題也...