zoukankan      html  css  js  c++  java
  • bzoj1002: [FJOI2007]轮状病毒

    并不会推公式。。。网上也找不到推的方法?!?QAQ终于会写高精度~(≧▽≦)/~啦啦啦

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define rep(i,n) for(int i=1;i<=n;i++)
    #define clr(x,c) memset(x,c,sizeof(x))
    #define REP(i,s,t) for(int i=s;i<=t;i++)
    struct node{
    	int a[100];int len;
    };
    node f[105];
    node mly(node a,int x){
    	rep(i,a.len) a.a[i]*=x;
    	rep(i,a.len) a.a[i+1]+=a.a[i]/10,a.a[i]%=10;
    	if(a.a[a.len+1]) a.len++;
    	return a;
    }
    node down(node a,node b){
    	rep(i,a.len) {
    		a.a[i]-=b.a[i];
    		if(a.a[i]<0) a.a[i]+=10,a.a[i+1]--;
    	}
    	a.a[1]+=2;int cur=1;
    	while(a.a[cur]>=10) a.a[cur]%=10,a.a[cur+1]++,cur++;
    	while(!a.a[a.len]) a.len--;
    	return a;
    }
    int main(){
    	int n;scanf("%d",&n);
    	f[1].a[1]=1;f[2].a[1]=5;f[1].len=f[2].len=1;
    	REP(i,3,n) f[i]=down(mly(f[i-1],3),f[i-2]);
    	for(int i=f[n].len;i;i--) printf("%d",f[n].a[i]);
    	return 0;
    }
    

      

    1002: [FJOI2007]轮状病毒

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 4173  Solved: 2306
    [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

     
    [Submit][Status][Discuss]
  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/fighting-to-the-end/p/5671786.html
Copyright © 2011-2022 走看看