华师一附中OI组

标题: P1011 车站 [打印本页]

作者: 倚窗倾听风吹雨    时间: 2018-8-20 12:01
标题: P1011 车站
https://www.luogu.org/problemnew/show/P1011

火车:
火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定的规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问从x站开出时车上的人数是多少?
输入:输入文件仅有一行,为四个整数a,n,m和x。(n<=23)
输出:输出x站开出时车上的人数。
输入输出举例:
输入tran.in                             则输出train.out
       010 40 6                               8



作者: 倚窗倾听风吹雨    时间: 2018-8-20 12:01
  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. int a,n,m,x,k;
  5. struct train
  6. {
  7.     int now,up,off;
  8. }t[30];

  9. int main()
  10. {
  11. //        freopen("train.in","r",stdin);
  12. //        freopen("train.out","w",stdout);
  13.     cin>>a>>n>>m>>x;
  14.     t[1].up=a;t[1].off=0;
  15.     t[1].now=a;
  16.     for(int i=0;i<=999999;i++)
  17.     {
  18.         t[2].up=i;
  19.         t[2].off=i;
  20.         t[2].now=a;
  21.         for(int j=3;j<=n-1;j++)
  22.             {
  23.                     t[j].up=t[j-1].up+t[j-2].up;
  24.                     t[j].off=t[j-1].up;
  25.                     t[j].now=t[j-1].now+t[j-1].up+t[j-2].up-t[j-1].up;
  26.             ///        cout<<t[j].up<<" "<<t[j].off<<" "<<t[j].now<<endl;
  27.             }
  28.             if(t[n-1].now==m)
  29.             {
  30.             cout<<t[x].now<<endl;
  31.         /*  for(int j=1;j<=n;j++)
  32.             cout<<t[j].up<<" "<<t[j].off<<" "<<t[j].now<<endl;*/
  33.   //          fclose(stdin);
  34.     //        fclose(stdout);
  35.             return 0;               
  36.         }
  37.     }
  38. }
复制代码





欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2