20181029 考試記錄

2022-05-08 19:42:09 字數 2916 閱讀 2052

題目pdf

w神爺的題解

t1:簡單$dfs$

#include#include

#include

#include

using

namespace

std;

inline

intread()

while(c>='

0'&&c<='9')

return f*ans;

}int a1[80],b1[80],a2[80],b2[80

];int n,m,num[102

];bool

check()

if(ans==n+m) return1;

return0;

}void dfs(int

pos)

if(pos==m+1) return

;

if(!a2[pos])

dfs(pos+1

);

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

}} int

main()

view code

t2:(垃圾題目,$getchar$換成$scanf$,就$100 score$了)

$k\leq 15$,所以想到可以用狀壓$dp$來解決,第一步是要求每兩個寶藏之間的距離,假設起點也是乙個寶藏,用$bfs$解決,然後問題就轉換成在乙個完全圖中選擇$x$個點,使經過一次後距離不超過$t$,最大的$x$是多少。所以考慮狀壓$dp$,但是當只有一位($dp(i)$ 表示當前狀態時是有後效性的,所以考慮二維)。

設$dp(i,j)$表示當前取到的狀態為$i$,最後乙個點是$j$的最小距離。然後看一下當前距離是否小於$t$,若小於然後統計一下狀態裡的$1$即可.$dp(i,j)=dp(u,p)+dis(p,j) $,然後就瞎搞了

#include#include

#include

#include

#include

using

namespace

std;

inline

intread()

while(c>='

0'&&c<='9')

return f*ans;

}int

n,m,k,t;

int a[512][512

];struct

nodep[

21];

int sx,sy,sry=1,has[512][512],vis[512][512],dis[21][21

];struct

node1;

queue

que;

int dx[4]=;

char str1[510

];int dy[4]=;

int dp[125537][21],d[21],inf=99999999

,ans;

intmain()

if(str=='s')

}getchar();

}memset(dis,

127/3,sizeof

(dis));

for(int st=1;st<=sry;st++)}}

}}

memset(dp,

127/3,sizeof

(dp));

dp[1][1]=0

;

for(int i=1;i<=(1

<1;i++)

for(int j=1;j<=sry;j++)

d[j]=1

;

if(dp[i][j]<=t)

ans=max(ans,st);}}

cout

<1

<

}

view code

t3:其實就是一道比較簡單的$dp$,結果看錯了$a_i$的範圍

首先,先離散化,lower_bound即可,確定一下每個數,就是把他們存到$1~n$中。然後看見題目上說的是最小的最大,果斷二分答案。我們假設$x$為二分的最小值,所以對於每乙個位置$pos$,我們先設$st[pos]$表示右端點為$pos$的最小$l$值滿足在$l~pos$中沒有相同的數,其實就是這道題(this)。所以$pos$上一塊的取值範圍是$[st[pos]-1,pos-i]$,我們設$g(i)$表示前$i$個音符已經劃定的方案數,及從$\sum_^r g(i)$,當前複雜度$o(n^2)$,考慮到$\sum_^r g(i)$這個式子可以字首和優化,所以$dp$總複雜度$o(n)$,時間複雜度:$o(nlog(n))$

#include#include

#include

#define mod 998244353#include

#define int long long

using

namespace

std;

inline

intread()

while(c>='

0'&&c<='9')

return f*ans;

}int g[525011],sumg[525011],n,a[525011],x[525011],st[525011],last[525011

];inline

intget(int

lim)

g[i]=(g[i]+mod)%mod;

sumg[i]=sumg[i-1]+g[i];

sumg[i]=(sumg[i]+mod)%mod;

}return g[n]%mod;

}bool check(int mid)

intmaxn;

signed main()

int l=1,r=n;

while(l<=r)

cout

return0;

}

view code

2017 3 18考試記錄

雖然只做出了乙個題,但是第二題跟第三題也有思路,就是單位時間解題效率不高導致沒有做完,所以以後要多做題來加強一下。第一題 題目要求看能否讓所有排隊的人都能正好買到票拿到找零 分析 運用新學的stl中的map容器,將面值與數量存入容器中 注 當收到100要找零75時,應該注意找零順序,有50就給50和...

2019 7 30考試記錄

機房模考 2019.7.30 今天考了三道題,算是題量較小,所以在考場上時間挺充裕,寫下了一段簡單的記錄。在引用的基礎上增加一些考試後講題的感悟吧。這道題乍一看是個斯特林數,但是慢慢審題,會發現它和斯特林數的區別 座位不能連續放女生 男生預設填充 那就有點像兔子生殖的那題,也就是在乙隻兔子生下後不能...

2019 8 3考試記錄

題目不難,還剩乙個小時,寫下記錄 寫於考場 現在看來好樂觀233 題目確實不難,但是打的有多差233 難受 字串模擬。不看下面的描述,我還以為是道裸kmp。但是更貼心的是,模式串可以分開 笑哭 應該就是反著掃一遍 字典序要大 模式串匹配了就存一下陣列下標。如果存下來的下標個數等於模式串長度那就是匹配...