车站题解
程序员文章站
2022-07-13 13:52:26
...
这里附上题目链接:车站。
~~手动分割~~
题目
~~手动分割~~
因为题目并没有给出车在第二站的上下车人数,而第三站以后的所有数据都与其相关,所以我们不妨设第二站上下车人数皆为 y。又因为第一站的上车人数为 a ,所以车在每一站的上下车人数与车从每一站出发时的车载人数都可以表达为参数 a、y的多项式 ma+ny。
探索规律
以下是每一站的上下车人数与车载人数的系数表:
发现规律了吗?!
- 对于上车人数,从第一行开始,m、n就分别构成了斐波拉数列;
- 对于下车人数,从第三行开始,m、n就分别构成了斐波拉数列;
- 对于车载人数,m [当前行]=m[上一行]+m[上车]-m[下车],n同理。
数学表示:
解法
1.(类似于)打表法
所谓从第x站出发时的车载人数实际上就是车在第x站完成上下客后的车内人数,也就是 a* total[x][0]+y* total[x][1]。
- 因为此题数据范围小,所以我们可以先将i=1~20的各项系数全部算出来。
- 直接将算好的total[x][0]与total[x][1]代入前式就行了。
- 当然,若给的x等于n,直接输出0.
如何算出第二站的上下车人数y???
首先我们要明白,因为车在最后一站乘客会全部下车,所以车到达最后一站时的车载人数就是车从倒数第二站出发时的人数。
y=(m-a*total[n-1][0])/total[n-1][1];//计算第二站的上下车人数
AC代码:
#include <stdio.h>
#include <stdlib.h>
//设在第二站上车人数与下车人数为y
int main()
{
int i=3,j;
int a,m,n,x,y;
int total[30][2]={0};//车上总人数
int get_on[30][2]={0},get_off[30][2]={0};//get_on用于存储上车人数表达式的两个系数,get_off用于存储下车人数表达式的两个系数
//输入数据
scanf("%d%d%d%d",&a,&n,&m,&x);
//初始化数组
get_on[1][0]=1;get_on[1][1]=0;
get_on[2][0]=0;get_on[2][1]=1;
get_off[2][0]=0;get_off[2][1]=1;
total[1][0]=1;total[1][1]=0;
total[2][0]=1;total[2][1]=0;
//计算每一站的上下车人数表达式系数与车载人数表达式的系数
while(i<=19)
{
get_on[i][0]=get_on[i-1][0]+get_on[i-2][0];
get_on[i][1]=get_on[i-1][1]+get_on[i-2][1];
get_off[i][0]=get_on[i-1][0];
get_off[i][1]=get_on[i-1][1];
total[i][0]=total[i-1][0]+get_on[i][0]-get_off[i][0];
total[i][1]=total[i-1][1]+get_on[i][1]-get_off[i][1];
i++;
}
y=(m-a*total[n-1][0])/total[n-1][1];//计算第二站的上下车人数
if(x==n)//最后一站
{
printf("0");
return 0;
}
else
{
printf("%d",a*total[x][0]+y*total[x][1]);
}
return 0;
}
不当之处,敬请斧正……
推荐阅读
-
分享Android平板电脑上开发应用程序不能全屏显示的问题解决
-
ERROR/AndroidRuntime(17121)的问题解决
-
Android编程开发ScrollView中ViewPager无法正常滑动问题解决方法
-
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
-
Lightroom cc 2018运行缓慢怎么办?Lightroom常见问题解答
-
sqlserver数据库最大Id冲突问题解决方法之一
-
illegal opcode 红屏报错(hp 360 G6安装win2003)问题解决方法
-
VS2010无法启动调试问题解决方法小结
-
ip修改后orcale服务无法启动问题解决
-
ORA-28002 Oracle 11g存在密码过期问题解决方案