第十一届北师大程序设计竞赛 by Zoo
来源:互联网 发布:结构的刚度矩阵怎么求 编辑:程序博客网 时间:2024/05/01 04:49
现场赛
team06 BJTU-01
队员:Ronnoc(5),MuQ~(4)
总共9 of 12
rank 1
以为被北航逆袭了
结果过了D的不是他们
榜单出来了...http://www.bnuoj.com/bnucpc/summary.htm
某北航罚时还被超了...
第一妥妥的
感觉3个没有出来的题DEG
D是树,E是贪心+搜索,G是搜索
没有全场的FB,只有I是局部的FB
表示有一个CE很忧伤....
报告
A题,MuQ~ 1Y
打表水题
#include<stdio.h>int main(){ char c[20][100]={"\0", "Unknown\0", "Spring Training\0", "Spring Training\0", "Spring Training\nBNU Contest\0", "Unknown\0", "Unknown\0", "Practice Week\nSummer Training\0", "Summer Training\0", "Regional Contest\0", "Regional Contest\0", "Basic Training\nRegional Contest\0", "Basic Training\nRookie Contest\0"}; int i,j,k,n; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&j); printf("%s\n",c[j]); } scanf("%d"); return 0;}
MuQ~,不知道什么题,也不知道几Y,反正是过了
3Y
#include<stdio.h>int main(){ int a[1020][10],t,i,j,k,kk,n,l,x,y[10000]; scanf("%d",&t); while(t--) { for(i=0;i<1020;i++) for(j=0;j<10;j++) a[i][j]=0; scanf("%d%d%d",&l,&x,&n); for(i=1;i<=n;i++) scanf("%d",&y[i]); a[x][0]=1; for(j=1;j<=4;j++) for(i=x+1;i<=l;i++) for(k=1;k<=n;k++) if(i-y[k]>=0) if(a[i-y[k]][j-1]) a[i][j]=1; if(a[l][4])printf("Yes\n"); else printf("No\n"); } return 0;}
C题
水题,可行的步数统计,奇偶性判断2Y
1CE...没有引用stdio的头文件
#include<math.h>#include<stdio.h>int main(){ int T; scanf("%d",&T); while(T--){ int L,H; scanf("%d%d",&L,&H); int res=0; while(L%2==0&&L)L/=2,res++; while(H%2==0&&H)H/=2,res++; if(res%2)printf("Adidas loses\n"); else printf("Adivon prevails\n"); } return 0; }
F题
直接dp递推1TLE
心里面有个dp表格
dp[i][j]表示第i个元素拍中且是第j个连续的概率
转移方程
dp[i][0]=1-p
dp[i][j]=dp[i-1][j-1]*p
然后结果是FOR(i,1,n)FOR(j,1,i)res+=dp[i][j]*j;
这个事第一次的结果
然后手写出公式发现每一行可以O(1)的求出和
总O(n)
2Y
看程序
#include<stdio.h>#define N 1010double dp[N][N];double sum[N],cha[N]; int main(){ int T; scanf("%d",&T); while(T--){ int n; double p; scanf("%d%lf",&n,&p); int i,j; cha[1]=(1-p)*p; sum[1]=p+cha[1]*(n-1); for(i=2;i<=n;i++){ sum[i]=(sum[i-1]-cha[i-1])*p; cha[i]=cha[i-1]*p; } double res=0; for(i=1;i<=n;i++)res+=i*sum[i]; printf("%.6lf\n",res); } return 0; }
H题
概率题
ai表示到刚好第i步的期望
推下公式即可
1RE数组开小了
2TLE时间开大了
3AC
#include<stdio.h>#define eps 1e-4double a[10010];double b[10010];int main(){ int T; scanf("%d",&T); while(T--){ double p,q,r; scanf("%lf",&p); q=p*p+(1-p)*(1-p); r=1-q; double sum=0; a[0]=r; int i; for(i=1;i<=10000;i++)a[i]=a[i-1]*(i+1)/i*q; for(i=0;i<=10000;i++)sum+=2*a[i]; printf("%.2lf\n",sum); } return 0; }
I题
bi=ai*w{mod m}
w*v=1{mod m}
so
bi*v=ai{mod m}
ai<<m
ai=bi*v%m
s=∑(bixi)
v*s=∑(bixi*v)=∑(aixi)
ai是个背包
搞定
1WA于long long
2WA于%64d
3AC 改用cin
#include<stdio.h>#define LL long long#include<iostream>using namespace std;LL a[40],b[40],sum[40];LL x[40];int main(){ LL n,v,m,w,S; int T; cin>>T; while(T--){ cin>>n; int i,j; for(i=1;i<=n;i++)cin>>b[i]; cin>>v>>m>>S; for(i=1;i<=n;i++) { a[i]=v*b[i];a[i]%=m; } int res=0; S*=v;S%=m; for(i=n;i>=1;i--){ if(S>=a[i]){x[i]=1;S-=a[i];} else x[i]=0; } for(i=1;i<=n;i++)printf("%d",x[i]); printf("\n"); } return 0; }
J
查克拉,dp什么的
没看懂提
MuQ~过的1Y
#include<stdio.h>int main(){ long t,i,j,k,c,n,dp[10][10020],a[10020]; scanf("%ld%ld",&c,&n); for(i=1;i<=n;i++) scanf("%ld",&a[i]); for(j=0;j<=n;j++) dp[0][j]=c; dp[1][0]=-1; for(j=1;j<=n;j++) { dp[1][j]=dp[1][j-1]; if(dp[0][j]-a[j]>dp[1][j] && dp[0][j]!=-1) dp[1][j]=dp[0][j]-a[j]; } dp[2][0]=-1; for(j=1;j<=n;j++) { dp[2][j]=dp[2][j-1]; if(dp[1][j]+a[j]>dp[2][j] && dp[1][j]!=-1) dp[2][j]=dp[1][j]+a[j]; } dp[3][0]=-1; for(j=1;j<=n;j++) { dp[3][j]=dp[3][j-1]; if(dp[2][j]-a[j]>dp[3][j] && dp[2][j]!=-1) dp[3][j]=dp[2][j]-a[j]; } dp[4][0]=-1; for(j=1;j<=n;j++) { dp[4][j]=dp[4][j-1]; if(dp[3][j]+a[j]>dp[4][j] && dp[3][j]!=-1) dp[4][j]=dp[3][j]+a[j]; } if(dp[4][n]==-1)printf("%ld\n",c); else printf("%d\n",dp[4][n]); return 0;}
K题
矩阵快乘
普通递推TLE
等价于a1s=1,a1j=0的列矩阵,不断乘一个n*n的矩阵
快乘log
总时间
n^3log(m*k)*T
1WA于矩阵建错了,和不是1
2WA,3WA忘记为什么了...
只记得有个trick,n=1
4AC
FB
#include<stdio.h>double G[55][25][25];double res[25][25];double tm[25][25];double aim[25],ha[25];int main(){ int T; scanf("%d",&T); while(T--){ int i,j,l,p,n,m,K,k,s; scanf("%d%d%d%d",&n,&m,&K,&s); int tp=m*K; for(i=1;i<=n;i++)ha[i]=0;ha[s]=1; for(i=1;i<=n;i++)for(j=1;j<=n;j++){ if(i==1&&j==2)G[0][j][i]=1.0; else if(i==n&&j==n-1)G[0][j][i]=1.0; else if(j==i+1||j==i-1)G[0][j][i]=0.5; else G[0][j][i]=0; res[i][j]=0; if(i==j)res[i][i]=1.0; } for(p=1;p<=50;p++){ for(i=1;i<=n;i++)for(j=1;j<=n;j++){ G[p][i][j]=0; for(k=1;k<=n;k++)G[p][i][j]+=G[p-1][i][k]*G[p-1][k][j]; } } for(p=0;p<=50;p++){ int flag=tp%2;tp/=2; if(!flag)continue; for(i=1;i<=n;i++)for(j=1;j<=n;j++)tm[i][j]=res[i][j]; for(i=1;i<=n;i++)for(j=1;j<=n;j++){ res[i][j]=0; for(k=1;k<=n;k++)res[i][j]+=G[p][i][k]*tm[k][j]; } } for(i=1;i<=n;i++){ aim[i]=0; for(k=1;k<=n;k++)aim[i]+=res[i][k]*ha[k]; } for(i=1;i<=n;i++){ if(n==1)aim[i]=1.0; if(i!=1)printf(" "); printf("%.4lf",aim[i]); } printf("\n"); } return 0; }
L题
一个矩阵一条直线
计算几何
MuQ~1Y
#include<stdio.h>int main(){ double t,x1,x2,y1,y2,a,b,c,s; double i1,i2,j1,j2,j3,j0; double sum; scanf("%lf",&t); while(t--) { scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); scanf("%lf%lf%lf",&a,&b,&c); s=(x2-x1)*(y2-y1); j0=(-1*a*x1-c)/b; j3=(-1*a*x2-c)/b; if(j0>=y2 && j3>=y2) { sum=0; } if(j0>=y2 && j3<=y2 && j3>=y1) { i1=(-1*b*y2-c)/a; sum=(x2-i1)*(y2-j3)/2; } if(j0>=y2 && j3<y1) { i1=(-1*b*y2-c)/a; i2=(-1*b*y1-c)/a; sum=(x2-i1+x2-i2)*(y2-y1)/2; } if(j0<y2 && j0>=y1 && j3>=y2) { i1=(-1*b*y2-c)/a; sum=(i1-x1)*(y2-j0)/2; } if(j0<y2 && j0>=y1 && j3<y2 && j3>=y1) { sum=(y2-j3+y2-j0)*(x2-x1)/2; } if(j0<y2 && j0>=y1 && j3<y1) { i1=(-1*b*y1-c)/a; sum=(j0-y1)*(i1-x1)/2; } if(j0<y1 && j3>=y2) { i1=(-1*b*y1-c)/a; i2=(-1*b*y2-c)/a; sum=(i1-x1+i2-x1)*(y2-y1)/2; } if(j0<y1 && j3<y2 && j3>=y1) { i1=(-1*b*y1-c)/a; sum=(x2-i1)*(j3-y1)/2; } if(j0<y1 && j3<y1) { sum=0; } if(sum>s/2)sum=s-sum; if(sum==0)sum=s; printf("%.3lf\n",sum); } return 0;}
比赛小结
结果不错(恩恩~~)
D拘束是字典树不会,EG都TLE不太会剪枝
开局我不是很顺,CE,RE都出了,不过后来踏下心来切概率还是不错的
最不爽的就是尼玛....电脑经常重启...
貌似MuQ~状态不错
本场比赛概率||dp好多啊...
最后1h有队伍过D
以为是北航...
抓狂死...
继续on my fighting way
还有感谢bnu某人的招待!!!
以上
- 第十一届北师大程序设计竞赛 by Zoo
- 第二届北师大程序设计竞赛
- 第二届北师大程序设计竞赛
- 第二届北师大程序设计竞赛
- 第二届北师大程序设计竞赛
- 第二届北师大程序设计竞赛
- 第二届北师大程序设计竞赛
- 第二届北师大程序设计竞赛
- 第二届北师大程序设计竞赛
- 第二届北师大程序设计竞赛
- 福州大学第十一届程序设计竞赛
- 福州大学第十一届程序设计竞赛
- 福州大学第十一届程序设计竞赛
- 第十一届浙江省程序设计竞赛
- 第十一届北京师范大学程序设计竞赛解题报告
- 第十一届浙江省大学生程序设计竞赛小结
- 2014 第十一届浙江省程序设计竞赛
- 湖南省第十一届程序设计竞赛总结
- 使用客户端工具XShell访问Linux的MySQL
- 视图的相关知识
- lib文件与dll文件的区别
- HDU 1723 动态规划(DP) Distribute Message
- hdu 1506 Largest Rectangle in a Histogram[动态规划]
- 第十一届北师大程序设计竞赛 by Zoo
- GestureDetector(手势)浅谈
- 在myeclipse中加入jstl标签的操作的一种方法
- 最薄翻转笔记本 联想Yoga13-IFI 6700
- 苹果公司可怜中国人
- 机器人II_ny_371
- Linux常用命令
- AVR按键扫描程序
- NYOJ 73 比大小