NOIP 2016模拟赛[nodgd题]T1 电路图1

来源:互联网 发布:java 调外部接口 编辑:程序博客网 时间:2024/05/17 22:11

这套题难到掉牙了……都爆零了

其实第二题线段树应该有40分,不知道哪里写错了就爆零啦!如果分段的话线段树+暴力是可以拿到70分的

第二三题真心难……都不想写题解了,而且nodgd发的题解除了第一题根本就没看懂,太吓人了


我们先来分析第一问:

从电源出发顺着电流方向,电流向右转为R,向左转为L,那么我们就可以构成一个长度为n的由R和L构成的字符串

并且字符串中R数量为n/2+2,L数量为n/2-2,由于相同的字符串构成的肯定是一样的图案,相同图案对应的字符串又肯定一样,所以求得字符串的数量就是图案的数量,容易知道数量为C(n,n/2+2)

接着来看第二问:

我们可以发现如果一个电路为美观的,则这个电路的弯折点一定出现在这个电路对应的矩形的四个角的地方

这个时候我们可以将矩形的边拉的很长,然后让转折的导线变得很小,这样总能使这一类的图形是美观的

因此我们接着讨论两种情况:

①:对于电源在矩形的四条边的位置,如下图


然后我们观察四个角的位置,对于每一个角,从电源出发的电流流过时的转向必定是以R开头,以R结尾并且长度为奇数的字符串,以上图中的x1,x2位置为例:

x1:RLRLRLRLR

x2:RLRLRLRLRLRLRLR

设x1,x2,x3,x4分别为在这四个地方的字符串的长度,发现x1+x2+x3+x4=n

对于xi,在该位置形成的直角个数为(xi+1)/2

因此我们设yi=(xi+1)/2,y1+y2+y3+y4=n/2+2=m,然后这其实就是一个隔板模型了(三个隔板m个球,分成4个位置的方案数),答案为C(m-1,3)

②:对于电源在四个角形成的边上,如下图:


这个时候情况与情况①基本相似,就是在x1位置的字符串以L开头,以R结尾并且长度为偶数

也有可能以R开头L结尾,长度为偶数,但是其实与图中方案相似,因此归为一类,最后乘个2

x1+x2+x3+x4+x5=n,仍然用隔板模型可得2*C(m-1,4)

所以最终答案是2*C(m-1,4)+C(m-1,3)

#include<cstdio>#include<iostream>#define LL long longusing namespace std;const LL mod=1000000007,maxn=4e7+5;LL f[maxn];LL MG(LL a,LL b){LL ans=1;a%=mod;while(b){if(b&1)ans=ans*a%mod;b>>=1;a=a*a%mod;}return ans;}LL C(LL n,LL m){return f[n]*MG(f[m],mod-2)%mod*MG(f[n-m],mod-2)%mod;}int main(){LL n;cin>>n;f[0]=1;for(LL i=1;i<=n;i++)f[i]=f[i-1]*i%mod;LL m=n/2+2;cout<<C(n,m)<<endl;cout<<(2*C(m-1,4)%mod+C(m-1,3))%mod;}


0 0
原创粉丝点击