zoukankan      html  css  js  c++  java
  • 济南学习 Day 4 T2 am

    LYK 与实验室(lab)
    Time Limit:5000ms Memory Limit:64MB
    题目描述
    LYK 在一幢大楼里,这幢大楼共有 n 层,LYK 初始时在第 a 层上。
    这幢大楼有一个秘密实验室,在第 b 层,这个实验室非常特别,对 LYK 具有约束作用,
    即若 LYK 当前处于 x 层,当它下一步想到达 y 层时,必须满足|x-y|<|x-b|,而且由于实验室
    是不对外开放的,电梯无法停留在第 b 层。
    LYK 想做一次旅行,即它想按 k 次电梯,它想知道不同的旅行方案个数有多少个。
    两个旅行方案不同当前仅当存在某一次按下电梯后停留的楼层不同。
    输入格式(lab.in)
    一行 4 个数,n,a,b,k。
    输出格式(lab.out)
    一个数表示答案,由于答案较大,将答案对 1000000007 取模后输出。
    输入样例 1
    5 2 4 1
    输出样例 1
    2
    输入样例 2
    5 2 4 2
    输出样例 2
    2
    输入样例 3
    5 3 4 1
    输出样例 3
    0
    数据范围
    对于 20%的数据 n,k<=5。
    对于 40%的数据 n,k<=10。
    对于 60%的数据 n,k<=500。
    对于 90%的数据 n,k<=2000。
    对于 100%的数据 n,k<=5000。

     1 #include<cstdio>
     2 #define ll long long
     3 using namespace std;
     4 const int N=1e5+10;
     5 const ll mod=1e9+7;
     6 int n,a,b,k;
     7 ll ans,f[N],sum[N];
     8 int main() {
     9     scanf("%d%d%d%d",&n,&a,&b,&k);
    10     f[a]=1;
    11     for(int i=a; i<=n; i++) sum[i]=1;
    12     for(int i=1; i<=k; i++) {
    13         f[b]=0;
    14         for(int j=1; j<b; j++)
    15             f[j]=(sum[(j+b-1)/2]-sum[j]+sum[j-1]+mod)%mod;
    16         for(int j=b+1; j<=n; j++)
    17             f[j]=(sum[n]-sum[(j+b)/2]-sum[j]+sum[j-1]+mod)%mod;
    18         for(int j=1; j<=n; j++)
    19             sum[j]=(sum[j-1]+f[j])%mod;
    20     }
    21     for(int i=1; i<=n; i++)
    22         ans=(ans+f[i])%mod;
    23     printf("%d",(int)ans);
    24     return 0;
    25 }

    思路:

  • 相关阅读:
    Linux环境进程间通信
    monitor
    用prctl给线程命名
    openfire本地环境搭建和openfire插件开发实例
    ubuntu12.04的vim配置
    SensorThread线程
    AndroidPN中的心跳检测
    openfire插件开发之完美开发
    poj3322 Bloxorz I
    设计模式总结
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6040104.html
Copyright © 2011-2022 走看看