zoukankan      html  css  js  c++  java
  • BZOJ [FJOI2007]轮状病毒 (找规律)

    1002: [FJOI2007]轮状病毒

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 6009  Solved: 3282
    [Submit][Status][Discuss]

    Description

      轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
    和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示

      N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
    同的3轮状病毒,如下图所示

      现给定n(N<=100),编程计算有多少个不同的n轮状病毒

    Input

      第一行有1个正整数n

    Output

      计算出的不同的n轮状病毒数输出

    Sample Input

    3

    Sample Output

    16

    HINT

     

    Source

    析:找规律,首先可以暴力找出前几项,是 1 5 16 45 121 320,规律很容易能看出来是 f[n] = 4 * f[n-1] - 4 * f[n-2] + f[n-3]

    由于数据比较大,高精度,可以用python来解决。

    n = input()
    f1 = int(1)
    f2 = int(5)
    f3 = int(16)
    if n == 1:	print 1
    elif n == 2:	print 5
    elif n == 3: 	print 16
    else:
    	f = int(0)
    	for i in range(3, n, 1):
    		f = 4 * f3 - 4 * f2 + f1
    		f1 = f2
    		f2 = f3
    		f3 = f
    	print f
    

      

  • 相关阅读:
    《老男孩》
    java中四种阶乘的计算
    DataOutputStream的乱码问题
    java中飞clone方法
    类反射的简单例子
    PHP: 如何连接oracle数据库进行数据读取
    .NET : 如何读取图片中的元数据信息
    重新审视REST
    PHP 的历史
    Image File Format Specifications {转载}
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/8075899.html
Copyright © 2011-2022 走看看