题目描述

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

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

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

输入输出格式

输入格式:

第一行有1个正整数n。

输出格式:

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

输入输出样例

输入样例#1:

3
输出样例#1:

16

Solution:

  本题打表找规律,高精码农题。

  随便什么姿势(手推或者爆搜),反正先打个表:$1,5,16,45,121,320,841,2205$。

  可以用各种角度找规律:

    1、稍微复杂点的规律:观察奇数项:$1^2,4^2,11^2,29^2$,指数均为$2$,而底数$a_i=3*a_{i-1}-a_{i-2},i>2$。再观察偶数项:$5*1^2,5*3^2,5*8^2,5*21^2$,系数均为$5$,指数均为$2$,而底数$a_i=3*a_{i-1}-a_{i-2},i>2$。所以我们可以奇偶分开求。

    2、简单点的规律:直接整体看,发现$a_i=3*a_{i-1}-a_{i-2}+2,i>2$。

  随便递推一波发现会爆long long,于是上线高精码农(~>_<~)。

代码:

/*Code by 520 -- 9.18*/
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
using namespace std;
const int Base=1e5;
int n,m;
struct node{
ll f[],len;
il void Clr(){memset(f,,sizeof(f)),len=;}
il void Push(ll x){f[len=]=x;}
node operator + (const node &x) const {
node tp;tp.Clr();tp.len=max(len,x.len)+;
For(i,,tp.len)
tp.f[i]+=f[i]+x.f[i],
tp.f[i+]+=tp.f[i]/Base,
tp.f[i]%=Base;
For(i,,tp.len) tp.f[i+]+=tp.f[i]/Base,tp.f[i]%=Base;
while(tp.len&&!tp.f[tp.len]) tp.len--;
return tp;
}
node operator - (const node &x) const {
node tp;tp.Clr();tp.len=len+;
For(i,,tp.len) {
tp.f[i]+=f[i]-x.f[i];
if(tp.f[i]<) tp.f[i+]--,tp.f[i]+=Base;
}
For(i,,tp.len) tp.f[i+]+=tp.f[i]/Base,tp.f[i]%=Base;
while(tp.len&&!tp.f[tp.len]) tp.len--;
return tp;
}
node operator * (const node &x) const {
node tp;tp.Clr();tp.len=len+x.len+;
For(i,,len) For(j,,x.len)
tp.f[i+j-]+=f[i]*x.f[j],
tp.f[i+j]+=tp.f[i+j-]/Base,
tp.f[i+j-]%=Base;
For(i,,tp.len) tp.f[i+]+=tp.f[i]/Base,tp.f[i]%=Base;
while(tp.len&&!tp.f[tp.len]) tp.len--;
return tp;
}
il void Output(){
printf("%lld",f[len]);
Bor(i,,len-) printf("%05lld",f[i]);
}
}a[],tp[]; int main(){
cin>>n,tp[].Push(),tp[].Push();
a[].Push(),a[].Push();
For(i,,n) a[i]=a[i-]*tp[]-a[i-]+tp[];
a[n].Output();
return ;
}

P2144 [FJOI2007]轮状病毒的更多相关文章

  1. 洛谷 P2144 [FJOI2007]轮状病毒

    P2144 [FJOI2007]轮状病毒 题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个\(n\)轮状基由圆环上\(n\)个不同的基原子和圆心的一个核原子构成.\(2\)个原子之 ...

  2. 洛谷P2144 [FJOI2007]轮状病毒

    可以用Matrix-Tree定理,然而被卡精度 #include<cstdio> #include<cstdlib> #include<algorithm> #in ...

  3. luogu P2144 [FJOI2007]轮状病毒

    传送门 随便摸一发题解算了 打表找规律 前五个答案是 1 5 16 45 121 其实是 1^2 3^2-4 4^2 7^2-4 11^2 底数就是类似于斐波那契数列,还有偶数项要减4 #includ ...

  4. 【洛谷】2144:[FJOI2007]轮状病毒【高精度】【数学推导??(找规律)】

    P2144 [FJOI2007]轮状病毒 题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间 ...

  5. 【bzoj1002】[FJOI2007]轮状病毒

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4381  Solved: 2393[Submit][Statu ...

  6. 【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度

    1002: [FJOI2007]轮状病毒 Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同 ...

  7. bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2234  Solved: 1227[Submit][Statu ...

  8. 生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3928  Solved: 2154[Submit][Statu ...

  9. BZOJ 1002 [FJOI2007]轮状病毒

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3106  Solved: 1724[Submit][Statu ...

随机推荐

  1. 动态加载与插件系统的初步实现(四):解析JSON、扩展Fiddler

    按文章结构,这部分应该给出WCFRest项目示例,我想WinForm示例足够详尽了,况且WCFRest还不需要使用插件AppDomain那一套,于是把最近写的Fiddler扩展搬上来吧. Fiddle ...

  2. 北美KubeCon新风,正把K8S魔力带向边缘计算

    作者:DJ 审校:Kevin·Wang 1. 容器生态圈新的创新方向 2018年容器技术圈的年终盛典北美KubeCon终于在西雅图落下了帷幕.这次北美KubeCon总共吸引了8000多观众参会,创下历 ...

  3. 【赛后补题】Lucky Probability(CodeForces 110D)

    题意 给定两个\(P,Q\)的正整数区间(\(P,Q\)都符合\([L,R]\)这个区间,并且都\(\le 10^9\)),分别从其中随机选出一个数,选出的两个数作为一个新区间的左右端点.要求新区间内 ...

  4. 关于dbw 与dbm 的计算

    一分贝(dB)表示单元信号强度的相对差异.其比率的基础对数为10,,如dB = 10 x Log10 (P1/P2). 基础10对数规则: Log10 (AxB) = Log10(A) + Log10 ...

  5. 图形 - bootStrap4常用CSS笔记

    .rounded 图片显示圆角效果 .rounded-circle 设置椭圆形图片 .img-thumbnail 设置图片缩略图(图片有边框) .img-fluid 响应式图片 .float-righ ...

  6. mysql删除表中的记录

    大家都知道,在MySQL中删除一个表中的记录有两种方法,一种是DELETE FROM TABLENAME WHERE... , 还有一种是TRUNCATE TABLE TABLENAME. DELET ...

  7. MySQL两种引擎的比较

    MyISAM,InnoDB主要区别: 1.MyISAM是非事物安全的,InnoDB是事物安全的. 事物安全的特点为更安全,遇到问题会自动恢复或从备份加事物日志回复,如果更新失败,你的所有改变都变回原来 ...

  8. 1分钟入门接口自动化框架Karate

    介绍 在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架——Karate Karate是基于另一个BDD测试框架Cucumber来建立的,并且共用了一些相同的思想.其中之一就是使用Gher ...

  9. Notes of Daily Scrum Meeting(11.5)

    Notes of Daily Scrum Meeting(11.5) 今天是我们学习学长代码,同时学习安卓语言的第三天.我们和学长沟通了一下,仔细讨论后得出一个结论,学长在 IOS平台上的代码可以借鉴 ...

  10. "重力锁屏"Beta版使用说明

    一.产品介绍 重力锁屏是基于android系统的一款锁屏软件.它利用重力感应器来判断用户的动作从而自动锁屏亮屏,是锁屏软件的一大创新.相比传统的锁屏软件,“重力锁屏”从可操作性.方便性.功能全面性都有 ...