P2144 [FJOI2007]轮状病毒

题目描述

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

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

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

输入输出格式

输入格式:

第一行有1个正整数n。

输出格式:

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

输入输出样例

输入样例#1: 复制

3
输出样例#1: 复制

16

Solution

然而正解是一系列看都看不懂的公式推导.....

可能老李给我们这道题是为了复习一下高精度八.....

于是他的目的达到了,大家果然都忘记叻!

那么首先打表找规律,打表程序见某位dalao,用并查集实现的超级暴力。

然后找规律,目前了解到有两种规律:1)以1、3开头的斐波拉契数列的平方,如果$n$是偶数减4,奇数不减。2)$f[i]=3f[i-1]-f[i-2]+2$

个人认为第一种比较好找,所以用的第一种。因为斐波拉契数列到后面非常大,所以写高精。

这里用了高精加、乘、减,乱搞搞就过了。

Code

#include<bits/stdc++.h>
using namespace std; int n; struct Node {
int a[], len;
}; Node mul(Node a, Node b) {
Node c;
memset(c.a, , sizeof(c.a));
for(int i = ; i <= a.len; i ++) {
int x = ;
for(int j = ; j <= b.len; j ++) {
c.a[i + j - ] = a.a[i] * b.a[j] + x + c.a[i + j - ];
x = c.a[i + j - ] / ;
c.a[i + j - ] %= ;
}
c.a[i + b.len] = x;
}
c.len = a.len + b.len;
while(c.a[c.len] == && c.len > ) c.len --;
return c;
} Node add(Node a, Node b) {
Node c;
memset(c.a, , sizeof(c.a));
for(int i = ; i <= max(a.len, b.len); i ++) {
int x = ;
c.a[i] = b.a[i] + a.a[i] + c.a[i];
x = c.a[i] / ;
c.a[i] %= ;
c.a[i + ] += x;
}
c.len = max(a.len, b.len) + ;
while(c.a[c.len] == && c.len > ) c.len --;
return c;
} Node sub(Node a, int x) {
Node c;
c.len = max(a.len, );
c.a[] = a.a[] - ;
for(int i = ; i <= c.len; i ++) c.a[i] = a.a[i];
for(int i = ; i <= c.len; i ++) {
if(c.a[i] < ) {
c.a[i + ] --;
c.a[i] = (c.a[i] + ) % ;
}
}
while(c.a[a.len] == && c.len > ) c.len --;
return c;
} void work() {
Node a, b, c;
memset(a.a, , sizeof(a.a));
memset(b.a, , sizeof(b.a));
a.len = b.len = ;
a.a[] = , b.a[] = ;
for(int i = ; i <= n; i ++) {
c = add(a, b);
swap(a, b); swap(b, c);
}
c = mul(b, b);
if(n % == )
c = sub(c, );
for(int i = c.len; i >= ; i --)
printf("%d", c.a[i]);
} int main() {
scanf("%d", &n);
if(n >= ) work();
if(n == ) printf("");
if(n == ) printf("");
return ;
}

【洛谷】2144:[FJOI2007]轮状病毒【高精度】【数学推导??(找规律)】的更多相关文章

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

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

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

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

  3. 洛谷 P1014 Cantor表【蛇皮矩阵/找规律/模拟】

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … ...

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

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

  5. 洛谷 P6914 - [ICPC2015 WF]Tours(割边+找性质)

    洛谷题面传送门 神仙题. 深夜写题解感受真好 我们考虑两个简单环 \(C_1,C_2\)​​​,我们假设颜色种类数为 \(k\)​​​,那么我们需要有 \(C_1,C_2\)​​​ 均符合条件,而由于 ...

  6. 洛谷 - P5000 - Hillwer编码 - 高精度

    https://www.luogu.org/problemnew/show/P5000 第一次写一个正经的高精度题. 很明显ASCII码的乘积绝对是溢出的. 那么直接上Java.正好学一手Java的字 ...

  7. 洛谷P1850 换教室_数学期望_Floyd

    调了一下午QAQ-让我对数学期望的理解又提升了一个层次. 首先,我们发现 v<=300v<=300v<=300 , 这样我们就可以用 FloydFloydFloyd 算法来 O(n3 ...

  8. 洛谷P1024 一元三次方程求解(数学)

    题意 题目链接 Sol 本来是一道好的公式题. 然后输出只要保留两位小数?? 直接上不就赢了嘛.. #include<bits/stdc++.h> #define LL long long ...

  9. [洛谷P4999]烦人的数学作业

    题目大意:定义$f(x)$表示$x$每一个数位(十进制)的数之和,求$\sum\limits_{i=l}^rf(i)$,多组询问. 题解:数位$DP$,可以求出每个数字的出现个数,再乘上每个数字的大小 ...

  10. 【洛谷】P1648 看守 (数学)

    题目链接 直接暴力搞\(O(n^2)\)显然是布星滴. 试想,若是一维,最远距离就是最大值减最小值. 现在推广到二维,因为有绝对值的存在,所以有四种情况 \((x1+y1) - (x2+y2), (x ...

随机推荐

  1. Linux XOR.DDoS样本取证特征与清除

    一.取证特征 1)获取进程ID 使用top命令,查看占用内存率最高的十位随机名称进程名(示例:进程名pygdykcrqf) 2)获取进程对应路径 Linux 在启动一个进程时,系统会在/proc下创建 ...

  2. 脚本病毒分析扫描专题1-VBA代码阅读扫盲、宏病毒分析

    1.Office Macor MS office宏的编程语言是Visual Basic For Applications(VBA). 微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功 ...

  3. word文档下划线无法显示的解决方法

    在编辑文档的时候经常会遇到下划线无法显示的情况,如图: 如果遇到不能在姓名后面加下划线的情况,我们该怎么做? 请看下面的图解: 1.首先点击左上角的office图标 2.点击右下角“word选项” 3 ...

  4. idea添加jdbc包

    IDEA版本:IDEA 14 这里我使用的第三方jar包是数据库的JDBC jar包导出案例. 1.创建一个Module,名称为dataBase,在里面我们先创建一个folder用来包含所需要的jar ...

  5. qlserver排序规则在全角与半角处理中的应用

    --1.查询区分全角与半角字符--测试数据DECLARE @t TABLE(col varchar(10))INSERT @t SELECT 'aa'UNION ALL SELECT 'Aa'UNIO ...

  6. 利用Metrics+influxdb+grafana构建监控平台

    https://blog.csdn.net/fishmai/article/details/51817429

  7. MVC 源码调试

    源码调试,帮助你跟好理解MVC,使你开发跟牛B的程序. 1>在Visual命令行中运行“SN.EXE-Vr*,31BF3856AD364E35” 2. codeplex.com 上面找到,和你当 ...

  8. 插头DP学习笔记——从入门到……????

    我们今天来学习插头DP??? BZOJ 2595:[Wc2008]游览计划 Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该 ...

  9. Educational Codeforces Round 45 (Rated for Div. 2) E - Post Lamps

    E - Post Lamps 思路:一开始看错题,以为一个地方不能重复覆盖,我一想值这不是sb题吗,直接每个power check一下就好....复杂度nlogn 然后发现不是,这样的话,对于每个po ...

  10. Python爬虫个人记录(二) 获取fishc 课件下载链接

    参考: Python爬虫个人记录(一)豆瓣250 (2017.9.6更新,通过cookie模拟登陆方法,已成功实现下载文件功能!!) 一.目的分析 获取http://bbs.fishc.com/for ...