zoukankan      html  css  js  c++  java
  • URAL 1513. Lemon Tale(简单的递推)

    写几组数据就会发现规律了啊。

    。但是我是竖着看的。。

    。还找了半天啊、、、

    只是要用高精度来写,水题啊。就当熟悉一下java了啊。

    num[i] = 2*num[i-1]-num[i-2-k]。

    1513. Lemon Tale

    Time limit: 1.0 second
    Memory limit: 64 MB

    Background

    For each programmer a point comes when the last contest is lost, and it is time to retire. Even Three Programmers themselves could not escape the common lot. But the Programmers also wanted to keep a good memory about themselves. For this noble purpose they created problems and organized extremely popular programming contests from time to time. Of course, this work was not well paid, but for true programmers a glory was more important than money.
    However it is only the first half of a job to think out a brilliant problem. The second one is to create a politically correct statement for it.

    Problem

    The matter is the statement of some problem for the upcoming contest was written by the Third Programmer, who knew nothing about political correctness. He just wrote a story about citrus plants growing. As a result a word "lemon" was mentioned N times in the statement.
    Besides, the problem is to be looked through by famous censor Alexander K. right before the contest. And it is a known fact, that lemons remind him of oranges he hates furiously. It worries the First and the Second Programmers greatly - they know exactly, that if a word "lemon" occurs more than Ktimes successively, the problem will be immediately disqualified from the contest.
    That is why the First and the Second Programmers connived secretly to login to the server at the eve of the contest and replace some "lemons" with much more politically correct "bananas" so that the problem could not be disqualified. How many ways are there to do it?

    Input

    The only line contains the integer numbers N (1 ≤ N ≤ 10000) and K (0 ≤ K ≤ N).

    Output

    You should output the desired number of ways.

    Sample

    input output
    5 2
    24

    Hint

    Let us denote a word "lemon" by a letter "L" and a word "banana" by a letter "B". So in the sample the initial sequence of words "LLLLL" might be transformed into the following politically correct sequences: "LLBLL", "LLBLB", "LLBBL", "LLBBB", "LBLLB", "LBLBL", "LBLBB", "LBBLL", "LBBLB", "LBBBL", "LBBBB", "BLLBL", "BLLBB", "BLBLL", "BLBLB", "BLBBL", "BLBBB", "BBLLB", "BBLBL", "BBLBB", "BBBLL", "BBBLB", "BBBBL" and "BBBBB".
    import java.math.BigInteger;
    import java.util.Scanner;
    
    
    
    public class Main {
    
    
    
    	public static void main(String[] args) {
    
    		Scanner cin = new Scanner(System.in);
    		int n, k;
    		BigInteger num[] = new BigInteger [100005];
    		while(cin.hasNext())
    		{
    			n = cin.nextInt();
    			k = cin.nextInt();
    			BigInteger ans;
    			BigInteger p = BigInteger.valueOf(2);
    			ans = p.pow(n);
    			if(k == 0)
    			{
    				System.out.println(1);
    				continue;
    			}
    			if(n == k)
    			{
    				System.out.println(ans);
    				continue;
    			}
    			num[0] = BigInteger.valueOf(1);
    			for(int i = 1; i <= k+1; i++) 
    			{
    				num[i] = p.pow(i-1);
    			}
    			for(int i = k+2; i <= n; i++)
    			{
    				num[i] = num[i-1].multiply(BigInteger.valueOf(2));
    				num[i] = num[i].subtract(num[i-2-k]);
    			}
    			ans = BigInteger.valueOf(0);
    			for(int i = n; i >= (n-k); i--)
    			{
    				ans = ans.add(num[i]);
    			}
    			System.out.println(ans);
    		}
    	}
    }


  • 相关阅读:
    [Web] 网络安全(SSH SSL HTTPS)
    [OS] 操作系统课程(三)
    [刷题] 203 Remove Linked List Elements
    [刷题] 206 Reverse Linked List
    for循环中let与var的区别,块级作用域如何产生与迭代中变量i如何记忆上一步的猜想
    es6入门1-- let与var的区别详解
    精读JavaScript模式(八),JS类式继承与现代继承模式其一
    精读JavaScript模式(七),命名空间模式,私有成员与静态成员
    精读JavaScript模式(六),Memoization模式与函数柯里化的应用
    精读JavaScript模式(五),函数的回调、闭包与重写模式
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6919987.html
Copyright © 2011-2022 走看看