NOIP模擬測試15

2022-03-16 19:19:02 字數 3014 閱讀 8152

t2讀題跪掉了好可惜 qaq

problem a:建設城市

插板加容斥搞個不停,得到柿子:$\sum \limits_ (-1) ^ c_ ^ \times c_n^i$。

預處理階乘和階乘逆元,ning幹。

1 #include 2

#define ll long long34

const

int d = 998244353

;5 ll n, m, k, fac[10000007], inv[10000007

], ans;67

ll qpow(ll x, ll b)

1314

void init(int

x) 19

20 ll c(int n, int

m) 23

24signed main()

30init(std::max(n, m));

31 ans += c(m - 1, n - 1

);32

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

38 printf("

%lld\n

", ans %d);

39return0;

40 }

problem a

problem b:轟炸行動

讀錯題,讀成一條邊的兩邊不能同時轟炸,這肯定就可以染色嘛,獲得了10分的好成績半個機房都看錯了

真正的題意:兩點聯通就不能同時轟炸。

那我就沒話講了。tarjan跑出scc,拓撲跑個最長鏈。

1 #include 2

3const

int n = 10000005;4

intn, m;

5 std::vectore[n], g[n];67

intdfn[n], low[n], stk[n], tp, num, scc, val[n], pos[n], ind[n], f[n], ans;

8bool

ins[n];910

void tarjan(int

x) else

if(ins[y]) 20}

21if (low[x] ==dfn[x]) while (y !=x);28}

29}3031

void

topsort() 38}

39while (!q.empty()) 48}

49}50for (int i = 1; i <= scc; i++)

51 ans =std::max(ans, f[i]);52}

5354

signed main()

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

63for (int x = 1; x <= n; x++) 69}

70}71topsort();

72 printf("

%d\n

", ans);

73return0;

74 }

problem b

problem c:石頭剪刀布

20分特判必拿。感覺像是能狀壓,但搞了半天搞不出來,感覺不可做,和ai下五子棋。

題解過於諤諤,n那麼小不是沒原因的(

設f[i][j][k][l]為i+j+k步i個石頭j個剪刀k個布,下一步為l的概率。然後就發現不可求。

再開乙個輔助陣列g[i][j][k]表示i+j+k步i個石頭j個剪刀k個布的概率。

g的轉移:$g[i][j][[k] += g[i-1][j][k] * r[t] + g[i][j-1][k] * s[t] + g[i][j][k-1] * p[t]$。

利用g可以把f也轉移了:$f[i][j][k][l] += f[i-1][j][k][l]*r[t]+f[i][j-1][k][l]*s[t]+f[i][j][k-1][l]*s[t]+g[i][j][k]*(r[t]+p[t]+s[t])$.

到這裡使勁想想還是能想出來的,但此時發現看不懂std。orz

std最主要看不懂的就是那個第5層迴圈。其實是這樣的。

首先std沒有開g,直接用f[0]當g用。我們要求f[i][j][k][l],首先要先從之前的狀態把已有概率繼承,柿子的前半段就是在幹這個。

if (x) f[j][k][l][x] += f[j][k][l][0] *qaq[i][x]

這一行只有j+k+l!=i的時候才會有可能執行。它存在的意義就是用g更新狀態,是之前柿子右半部分。

if (j) f[j][k][l][x] += f[j-1][k][l][x] * qaq[i][1

];if (k) f[j][k][l][x] += f[j][k-1][l][x] * qaq[i][2

];if (l) f[j][k][l][x] += f[j][k][l-1][x] * qaq[i][3];

這三行得分成x = 0和x > 0去看。x > 0時仍然是繼承。x = 0時則是在更新g。

當j+k+l==i時,目標狀態都已經更新完畢了,這時用目標狀態給下乙個狀態更新一下g。

1 #include 2

3intn;4

double qaq[105][5], f[60][60][60][10], c[70][70

], ans;56

signed main()

14 c[0][0] = c[1][0]= c[1][1] = 1.0;15

for (int i = 2; i <= n; i++) 20}

21 f[0][0][0][0] = 1.0;22

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

33}34}

35}36for (int i = 0; i < n; i++) 45}

46}47 printf("

%.12lf\n

", ans);

48return0;

49 }

problem c

NOIP模擬測試22

自 閉 賽 從這次比賽之後題都好難啊qaq 開考一小時內沒動鍵盤。三道題都不會。gg problem a 數論 過於玄學 列舉質因子,往答案裡去加。用來加入的質因子不會很多,質因子大了對答案是不優的。開兩個vector來回倒騰就完了 這題改完感覺也沒啥,為啥考場上就是想不出來啊qxq 1 inclu...

NOIP模擬測試20

liu runda聚聚的饋贈 problem a 周 防自閉題?這道題讓我整個考試都很愉悅 搜就完事了 1 include 2 3intn 4 int a 20 b 20 c 20 d 20 5 long long ans 67 void dfs int day,long long oi,long ...

NOIP模擬測試23

這次考試又一次暴露了我很大的問題。首先做的比較好的是這幾次考試一分沒掛,但是,這也體現了更大的問題,那就是我的實力似乎也僅限於此了。考試先拿滿了暴力分 100 0 50 然後看了看t2沒看懂,打了個記憶化搜尋,只有10分,此時只過了不到2個小時 沒看懂題也就罷了,那真的是我菜,可是接下來,我沒有再去...