HZOI20190902模擬35題解

2022-04-14 06:50:55 字數 1713 閱讀 8225

題面:

a:公園

dag上想拓撲dp

然而博主記憶化搜尋了一下

設f[i][j]表示從i節點走j個點出公園所用的最小時間

則$f[u][i]=min(f[v][j-1]+dis_)$;

然後記憶化搜尋

#include#include#include#include#include#define int long long

#define re register

#define maxv 2005

#define maxe 6005

using namespace std;

int v,m,n,e,l,a[maxe],b[maxe],ans=0;

int to[maxe],nxt[maxe],pre[maxv],cnt=0,val[maxe];

inline void add(re int u,re int v,re int w)

int ent[maxe],f[maxv][maxv];

bool vis[maxv];

inline void dfs(re int x)

for(re int i=pre[x];i;i=nxt[i])

for(re int j=1;j<=v;j++)

f[x][j]=min(f[x][j],f[y][j-1]+val[i]); }}

signed main()

for(re int i=1,x;i<=n;++i)

for(re int i=1,p,q,w;i<=e;++i)

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

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

} printf("%lld\n",ans);

return 0;

}

b:計畫

先想乙個暴力

我們預處理乙個b[i],表示由i位置之後經過b[i]後是第一次出現m個不同的數

然後對於每乙個詢問(x,y),$ans=\sum\limits_^\frac(b[i]

我們發現b[i]是單調增的,所以列舉到第乙個b[i]>y就break

於是有80分

然後我們優化

我們發現$(y+b[i]-2i)*(y-b[i]+1)=y^2+y+b[i]-b[i]^2+2ib[i]-2i-2iy$

這個可以字首和優化

那麼重點就是找到第乙個b[i]>y的位置,二分即可

#include#include#include#include#include#define maxn 100005

#define re register

#define int long long

using namespace std;

int n,m,q,a[maxn],b[maxn],sum[maxn],cnt[maxn];

bool vis[maxn];

inline int get(re int l)

return n+1;

}signed main()

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

while(q--)

res+=(sum[l-1]-sum[x-1]+(l-x)*(y*y+y)-2*y*(cnt[l-1]-cnt[x-1]))/2;

printf("%lld\n",res);

} return 0;

}

HZOI20190828模擬32題解

題面 chinese 考慮 sum limits i f i 的意義 所有方案中煉字的個數之和。統計答案時可以考慮 1,k 每個字對答案的貢獻,即每個字在多少種方案中成為煉字。在方格的乙個確定位置 x,y 字元i對答案的貢獻 x,y 位置的數是i且i是煉字的方案數 是 i 1 i 1 k 由於詩作中...

HZOI0814NOIp模擬賽 考試筆記

rank1 gekoo 240pts rank2 kai586123 220pts rank3 hzoier yxk hzoier wmz 190pts rank5 一堆人 170pts 考試概況 t1 模擬題 pts 100 t2 數論 pts 30 t3 神奇數字dp pts 40 sum 17...

HZOI19年07 14NOIp模擬賽筆記

我尋思著因為我們是提前跟衡中打了招呼才拿到的賬號,所以題還是不能公開的吧.所以我就只聊聊自己怎麼搞的 聽說衡中那邊一考完就有個金牌爺給他們講題 好羨慕啊 我們就很鬱悶了.一群人圍著黑板講各種錯解.t1 序列 考場上 我第一次看的時候看錯了,導致浪費了1h.看懂題之後開始推幾個小結論 solution...