2017.10.26 四校联测D1

来源:互联网 发布:mysql 解锁 编辑:程序博客网 时间:2024/05/01 12:40

题目比以前的题不知道高明到哪里去了,虽然std有错+数据有问题


T1 地精部落原题

#include<iostream>#include<cstdio>using namespace std;long long n,p,dowh,ans,i,f[2][5000][2],j;int main(){freopen("rabbit.in","r",stdin);freopen("rabbit.out","w",stdout);cin>>n>>p;dowh=1;    f[0][1][0]=1;    f[0][1][1]=1;    f[0][2][1]=1;f[0][2][0]=1;for(i=3;i<=n;i++,dowh^=1){for(j=1;j<=i;j++)f[dowh][j][0]=f[dowh^1][j][1];for(j=1;j<=i;j++)f[dowh][j][1]=f[dowh^1][j-1][0];if(i!=n){for(j=i;j>=1;j--)f[dowh][j][1]=(f[dowh][j][1]+f[dowh][j+1][1])%p;    for(j=1;j<=i;j++)f[dowh][j][0]=(f[dowh][j][0]+f[dowh][j-1][0])%p;}}dowh^=1;for(i=1;i<=n;i++){ans+=f[dowh][i][0];ans%=p;ans+=f[dowh][i][1];ans%=p;}cout<<ans%p;}


T2模拟:

#include<iostream>#include<cstdio>using namespace std;int T,n,m,i,j,tong[29];char x;int main(){freopen("quilt.in","r",stdin);freopen("quilt.out","w",stdout);scanf("%d",&T);while(T--){for(i=0;i<=25;i++)tong[i]=0;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)for(j=1;j<=m;j++){scanf("%c",&x);while(x<'a'||x>'z')scanf("%c",&x);tong[x-'a']++;}bool keyi=1;if(n%2&&m%2)//双奇 {   for(i=1;i<=(m/2)*(n/2);i++)//4个的{for(j=0;j<=25;j++){if(tong[j]>=4){tong[j]-=4;break;}}if(j==26)keyi=0;} for(i=1;i<=(m/2)+(n/2);i++)//2个的{for(j=0;j<=25;j++){if(tong[j]>=2){tong[j]-=2;break;}}if(j==26)keyi=0;}}elseif(n%2==0&&m%2==0)//双偶 {   for(i=1;i<=(m/2)*(n/2);i++)//4个的{for(j=0;j<=25;j++){if(tong[j]>=4){tong[j]-=4;break;}}if(j==26)keyi=0;}}elseif(n%2)//n奇 {   for(i=1;i<=(m/2)*(n/2);i++)//4个的{for(j=0;j<=25;j++){if(tong[j]>=4){tong[j]-=4;break;}}if(j==26)keyi=0;}   for(i=1;i<=(m/2);i++)//2个的{for(j=0;j<=25;j++){if(tong[j]>=2){tong[j]-=2;break;}}if(j==26)keyi=0;}}else//m奇 {   for(i=1;i<=(m/2)*(n/2);i++)//4个的{for(j=0;j<=25;j++){if(tong[j]>=4){tong[j]-=4;break;}}if(j==26)keyi=0;}   for(i=1;i<=(n/2);i++)//2个的{for(j=0;j<=25;j++){if(tong[j]>=2){tong[j]-=2;break;}}if(j==26)keyi=0;}}if(keyi){cout<<"Yes\n";}else cout<<"No\n";    }}


T3dfs

#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define N 5000005int n,i,xia[N],hou[N<<1],zhong[N],d,q;long long ni,f[N],ff[N],ans,sz[N],x,y,p,tot,lin=0;bool bj[N];#define P 1000000007char xch,xB[1<<15],*xS=xB,*xTT=xB;inline int read(){int 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*10+ch-'0';ch=getchar();}return x*f;}void exgcd(int a,int m){if(m==0){x=1;y=0;return;}exgcd(m,a%m);long longtemp=y;y=x-a/m*y;x=temp;}void jian(int a,int b){++tot;hou[tot]=xia[a],xia[a]=tot,zhong[tot]=b;}void jia(int a,int b){jian(a,b);jian(b,a);}void dfs(int o,int fa,int dis){int i,last=0;if(dis==d)bj[o]=1;for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fa)continue;dfs(nd,o,dis+1);sz[o]+=sz[nd];last=nd;}if(last==0){sz[o]=1;if(dis<=d)bj[o]=1;}}void dfs1(int o,int fa){int i;if(bj[o]){for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fa)continue;ans=(ans+(sz[o]-sz[nd])*sz[nd]%P*p%P*ni%P)%P;tot+=(sz[o]-sz[nd])*sz[nd];tot%=P;//一个点独立的总数 //cout<<endl<<" "<<(sz[o]-sz[nd])*sz[nd]<<" "<<p*ni<<" "<<(sz[o]-sz[nd])*sz[nd]*p*ni<<endl;}return;}else{for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fa)continue;dfs1(nd,o);}}}void dfs2(int o,int fa){if(bj[o]){f[o]=sz[o];//对于叶子节点,f一开始存叶子个数return;}int i,he=0;for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fa)continue;dfs2(nd,o);f[o]=(f[o]+f[nd]*p%P*ni%P)%P;//nd所有到nd的路径  一步到o}}void dfs3(int o,int fa)//统计贡献 {if(bj[o]){ans=(ans+sz[o]*ff[o]%P*p%P*ni%P)%P;lin+=sz[o];return ;}int i;for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fa)continue;ff[nd]=(ff[o]+f[o]-f[nd]*p%P*ni%P+P)%P*p%P*ni%P;//ff处理f节点刀塔的信息dfs3(nd,o); }}void dfs4(int o,int fa){int i;if(bj[o]){tot+=(lin-sz[o])*sz[o];tot%=P;return;}for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fa)continue;dfs4(nd,o);}}int main(){freopen("mosquito.in","r",stdin);freopen("mosquito.out","w",stdout);memset(xia,-1,sizeof(xia));n=read();for(i=1;i<n;i++){x=read();y=read();jia(x,y);}d=read();p=read();q=read();exgcd(q,P);ni=x;tot=0;//cout<<ni<<" ";p=q-p;dfs(1,0,0);dfs1(1,0);dfs2(1,0);dfs3(1,0);dfs4(1,0);cout<<((tot-ans)%P+P)%P;}


原创粉丝点击