2017 11 04 NOIP提高組 模擬賽B組

2021-08-10 15:42:34 字數 2731 閱讀 3187

這次比賽我應該是100分的,但是只有20,就因為堆的down操作打錯了。。。gg。

t1:【noip2017提高a組衝刺11.2】字典序

最水的一題了,而且也是唯一會做的一題。

就是拓撲排序,再用乙個堆優化一下。就好了。

#include

#include

#include

using namespace std;

intlast[100010],next[100010],tov[100010];

int n,m,tot;

int f[100010];

int ans[100010];

int num[100010];

void insert(int

x,int

y)void up(intx)}

void down(intx)}

int main()

tot=0;

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

if(num[i]==0)

while(tot)

i=next[i];}}

if (ans[0]printf("-1");

else

for (i=1;i<=ans[0];++i) printf("%d ",ans[i]);

printf("\n");

}

t2:【noip2017提高a組衝刺11.2】救贖

先用樹形dp做出每乙個節點為根的期望值。

然後可以遞迴每個點為根時的期望。這樣它的父親節點就會成為它的兒子。

然後推一推就對了。

#include

#include

using

namespace

std;

long

long f[100010];

int last[200010],next[200010],tov[200010];

long

long size[100010],son[100010];

long

long n,sum,tot,p=998244353;

long

long ans[100010];

void insert(int x,int y)

long

long ksm(long

long x,long

long y)

return k;

}long

long moon(long

long x,long

long y)

void dfs(long

long x,int father)

}f[x]=moon(size[x],son[x])%p;

sum=(sum+f[x])%p;

}void dfs_ans(long

long x,long

long sf,long

long sa,long

long father)

}}int main()

dfs(1,0);

dfs_ans(1,0,0,0);

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

printf("%lld\n",ans[i]);

}

t3: 【noip2017提高a組衝刺11.2】失格

這題我改的最久。

我們可以發現這是一道最小生成樹,然後就會發現不能暴力連邊,我們可以只連剛好大於這個點的每個倍數的點。

然後最小生成樹的排序部分用筒排。

就過了,細節注意。

#include

#include

#include

using namespace std;

struct cdy;

struct cdy2;

int n,tot;

cdy2 p[100010],p1[100010];

int ans,len;

int a[100010];

int f[100010];

cdy edge[32000001];

int num[10000001];

intq[32000001],q1[32000001];

int sum[10000001],chen[10000001];

bool cmp2(cdy2 a,cdy2 b)

int find(int

x)int main()

sort(p+1,p+1+n,cmp2);

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

else

}int

s,l,r,mid,x;

l=2;

for (i=1;i<=ma;++i)

}for (i=1;i<=len-1;++i)}}

ma=0;

for (i=1;i<=tot;++i)

for (i=0;i<=ma;++i)

sum[i]=sum[i-1]+num[i];

for (i=1;i<=tot;++i)

for (i=1;i<=n;++i) f[i]=i;

int xx,yy,ans,k;

ans=k=0;

for (i=1;i<=q[0];++i)

if(k==n-1)break;

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

}

NOIP提高組 矩陣

在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...

NOIP提高組2005 過河

過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...

NOIP提高組 20151029模擬

其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...