• 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]
  • 相关阅读:
    OC基础框架
    协议代理
    内存管理
    重写init或自定义init方法
    iOS输入框UITextField输入限制
    iOS 打包FrameWork
    iOS 持续往文件写入数据。
    ld: library not found for -lxxx 问题的解决办法
    iOS 侧滑返回过程中导航栏的黑色问题解决办法
    iOS 蓝牙分包发送数据
  • 原文地址:https://www.cnblogs.com/fighting-to-the-end/p/5671786.html
Copyright © 2020-2023  润新知