【题解】牛客CSP-S提高组赛前集训营4

A 复读数组

可以通过枚举每一个数,计算有多少个区间包含
在这个的数组中出现的位置为。先补集转化,然后就变成了不包含的区间个数。那么的每一次相邻的出现之间的所有区间都是满足条件的。设,那么不包含的区间个数就为

30分算法

时,暴力计算以上式子即可。

100分做法

都很好计算。对于,需要分为两部分,一部分为在数组中相邻的两次出现,这种情况一共被计算了次;还有一部分为在数组中的最后一次出现和下一次重复的第一次出现,这种情况一共没计算了次。分两种情况便可以计算出答案。

B 路径计数机

20分做法

枚举计算答案。

树是一条链

可以发现距离为一个定值的路径数是级别的。暴力枚举两条路径即可。

100分做法

我们先枚举,那么满足条件的一共有两种情况。

  • 的子树内。
  • 不在的子树内。

对于第一种情况,只要不在的路径上即可。定义,长度为的路径数。预处理数组即可。可以通过枚举每一条路径计算贡献得到。
对于第二种情况,只要的路径不经过连接的父亲的这条边即可。预处理经过每一条边,长度为的路径即可。可以通过枚举每一条路径,然后树上差分计算贡献得到。
复杂度

C 排列计数机

10分做法

枚举所有子序列计算答案。

20分做法

,选出的子序列的最大值为,当前权值为的方案数。枚举下一个数选不选,若选了且比当前最大值要大,那么权值会加一。

另一个20分做法

可以发现序列权值就是单调栈中的元素个数。那么设为第个数为单调栈里的数,总共选了个数的方案数,那么若枚举单调栈中数,那么之间比小的数都可选可不选。

40分做法

上述的另一个20分做法可以使用前缀和优化。

m = 1

可以计算每个数出现在多少个子序列的单调栈里,即在这个数前面并比它大的数都不能选,其他数可以任选。用树状数组统计即可。

100分做法

由于是一个次多项式,是一个次多项式,那么通过逐位确定,可求出,使得(其实可以证明与斯特林数有关)。那么题目就变成了对于每一个,对于所有非空子序列的权值,求之和。
可以发现序列权值就是单调栈中的元素个数。那么求之和,可以变成枚举非空子序列,在它的单调栈中选出个元素的方案数。
那么可以使用动态规划,设为选了第个数,总共选了个数的答案。那么,即在第个数和第个数之间,所有满足都是可能在子序列中出现。
可以先从小到大枚举,然后按照从小到大枚举,容易发现这个转移可以使用线段树优化。
复杂度

全部评论
日常T1被降智.jpg
30 回复
分享
发布于 2019-11-05 22:09
日常t1过大样例爆零(你们的大样例都是假的 ***)
13 回复
分享
发布于 2019-11-06 07:43
博乐游戏
校招火热招聘中
官网直投
求出题人加强数据卡掉我第二题 的代码,让我有动力去补正解,谢谢。https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41606129
9 回复
分享
发布于 2019-11-06 08:22
哪里可以下数据吗,本地自造数据和大样例过了结果爆零233
7 回复
分享
发布于 2019-11-05 22:12
T2我的做法是 n 遍dfs,求出所有距离为 p,q 的点对,然后丢进两个set里去重,最后枚举set,用LCA判断是否交叉,这样 n^4 log n 居然水了50分...
7 回复
分享
发布于 2019-11-05 22:51
看不太透啊
3 回复
分享
发布于 2019-11-05 22:11
请问出题人提供std吗😳
3 回复
分享
发布于 2019-11-05 22:33
难受的就是想出来的都是正解,但是因为时间不够打不完而爆零,在考场上会正解没打出来和不会没有区别
3 回复
分享
发布于 2019-11-06 10:32
我T1还写***树我怕不是憨憨
2 回复
分享
发布于 2019-11-05 22:41
T2不是上一次说的换根DP吗,为啥要用lca?
2 回复
分享
发布于 2019-11-06 06:10
看不太透啊
1 回复
分享
发布于 2019-11-05 22:11
T2大样例是错的为啥不早说,我到考试结束都不知道T2大样例是错的,害的我调试T2心态炸了,大样例死活过不去!!!
1 回复
分享
发布于 2019-11-05 22:13
#include<cmath> #include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm> #include<cstring> #include<map> #include<queue> #include<set> #include<vector> #include<bitset> #define int __int128 #define ll __int128 using namespace std; const int maxn=300005; const long long mod=1e9+7; int n; ll k,sum,a[maxn],shika[maxn],f1,f2,f3,erci,yici,changshu; map<ll,ll>pre; inline ll read() {     ll x=0,f=1;     char ch=getchar();     while(ch<'0'||ch>'9')     {         if(ch=='-')             f=-1;         ch=getchar();     }     while(ch>='0'&&ch<='9')     {         x=(x<<1)+(x<<3)+(ch^48);         ch=getchar();     }     return x*f; } inline void write(ll a) {     if(a<0)     {         char a='-',b='1';         putchar(a);         putchar(b);     }     else     {         if(a>=10)             write(a/10);         putchar(a%10+'0');     } } void jiefangcheng(int f1,int f2,int f3) {     erci=(f3+f1-2*f2)/2;     erci%=mod;     yici=f2-f1-3*erci;     yici%=mod;     changshu=f1-erci-yici;     changshu%=mod; } signed main() {     n=read(),k=read();     for(int i=1;i<=n;++i)         a[i]=a[i+n]=a[i+2*n]=read();     for(int i=1;i<=3*n;++i)     {         if(pre.find(a[i])==pre.end())             pre[a[i]]=0;         shika[i]=(shika[i-1]+pre[a[i]])%mod; //      cout<<shika[i]<<' ';         sum=(sum+i*(i+1)/2-shika[i])%mod;         if(i==n)             f1=sum;         if(i==2*n)             f2=sum;         if(i==3*n)             f3=sum;         pre[a[i]]=i;     }     jiefangcheng(f1,f2,f3); //  cout<<f1<<' '<<f2<<' '<<f3<<endl; //  cout<<erci<<' '<<yici<<' '<<changshu<<endl;     write(((erci*k%mod*k%mod+yici*k%mod+changshu)%mod+mod)%mod);     return 0; } 90分求助
1 回复
分享
发布于 2019-11-05 22:15
T1没开long long变成30分了我自闭了
1 回复
分享
发布于 2019-11-05 22:26
什么时候牛客可以提供赛后的数据下载。。。。。
1 回复
分享
发布于 2019-11-06 07:04
@nqiiii 大佬可以解释下T2第一种情况的是怎么做的吗?我们枚举a,b就已经是了,然后还需要枚举lca(a,b)子树内的每个点就是O(n3)了 是我哪里还没理解吗?或者给个STD也可以
1 回复
分享
发布于 2019-11-06 10:03
有没有t2写的这样的树dp啊  dp[i][j][[0/1][0/1]表示以i为根的子树中,包括根在内有j个点连成一条链可以往父节点继续连,子树内其他部分是否已经选了长度为p的链和长度为q的链的方案树 求个ac代码。。。过了大样例然而60
1 回复
分享
发布于 2019-11-06 14:12
jxcakak
1 回复
分享
发布于 2019-11-07 17:50
T3不是可以先预处理出所有im, 1in 这样就不需要用组合数了
1 回复
分享
发布于 2019-11-14 14:48
T2大样例问了楼主,满怀期望的等了5分钟,等来了个no response→_→(手调大样例令人快乐
2 回复
分享
发布于 2019-11-06 07:49

相关推荐

26 8 评论
分享
牛客网
牛客企业服务