【洛谷】2144:[FJOI2007]轮状病毒【高精度】【数学推导??(找规律)】
P2144 [FJOI2007]轮状病毒
题目描述
轮状病毒有很多变种。许多轮状病毒都是由一个轮状基产生。一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成。2个原子之间的边表示这2个原子之间的信息通道,如图1。
n轮状病毒的产生规律是在n轮状基中删除若干边,使各原子之间有唯一一条信息通道。例如,共有16个不同的3轮状病毒,入图2所示。
给定n(N<=100),编程计算有多少个不同的n轮状病毒。
输入输出格式
输入格式:
第一行有1个正整数n。
输出格式:
将编程计算出的不同的n轮状病毒数输出
输入输出样例
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]轮状病毒【高精度】【数学推导??(找规律)】的更多相关文章
- 洛谷 P2144 [FJOI2007]轮状病毒
P2144 [FJOI2007]轮状病毒 题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个\(n\)轮状基由圆环上\(n\)个不同的基原子和圆心的一个核原子构成.\(2\)个原子之 ...
- 洛谷P2144 [FJOI2007]轮状病毒
可以用Matrix-Tree定理,然而被卡精度 #include<cstdio> #include<cstdlib> #include<algorithm> #in ...
- 洛谷 P1014 Cantor表【蛇皮矩阵/找规律/模拟】
题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- 洛谷 P6914 - [ICPC2015 WF]Tours(割边+找性质)
洛谷题面传送门 神仙题. 深夜写题解感受真好 我们考虑两个简单环 \(C_1,C_2\),我们假设颜色种类数为 \(k\),那么我们需要有 \(C_1,C_2\) 均符合条件,而由于 ...
- 洛谷 - P5000 - Hillwer编码 - 高精度
https://www.luogu.org/problemnew/show/P5000 第一次写一个正经的高精度题. 很明显ASCII码的乘积绝对是溢出的. 那么直接上Java.正好学一手Java的字 ...
- 洛谷P1850 换教室_数学期望_Floyd
调了一下午QAQ-让我对数学期望的理解又提升了一个层次. 首先,我们发现 v<=300v<=300v<=300 , 这样我们就可以用 FloydFloydFloyd 算法来 O(n3 ...
- 洛谷P1024 一元三次方程求解(数学)
题意 题目链接 Sol 本来是一道好的公式题. 然后输出只要保留两位小数?? 直接上不就赢了嘛.. #include<bits/stdc++.h> #define LL long long ...
- [洛谷P4999]烦人的数学作业
题目大意:定义$f(x)$表示$x$每一个数位(十进制)的数之和,求$\sum\limits_{i=l}^rf(i)$,多组询问. 题解:数位$DP$,可以求出每个数字的出现个数,再乘上每个数字的大小 ...
- 【洛谷】P1648 看守 (数学)
题目链接 直接暴力搞\(O(n^2)\)显然是布星滴. 试想,若是一维,最远距离就是最大值减最小值. 现在推广到二维,因为有绝对值的存在,所以有四种情况 \((x1+y1) - (x2+y2), (x ...
随机推荐
- 与JavaWeb有关的故事(Web请求与Java IO)
作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...
- NB-iot 和 emtc两种技术区别
此前有报道称,工信部正在拟定推动窄频物联网(NB-IoT)标准化,并对NB-IoT模块外形.封装以及针脚定义等提出新规范.业内人士认为,标准出台后将促进物联网规模化商用全面提速,迎来行业成长爆发期. ...
- linux用户权限 -> 系统用户管理
用户基本概述: Linux用户属于多用户操作系统,在windows中,可以创建多个用户,但不允许同一时间多个用户进行系统登陆,但是Linux可以同时支持多个用户同时登陆操作系统,登陆后互相之间并不影响 ...
- 03 Go 1.3 Release Notes
Go 1.3 Release Notes Introduction to Go 1.3 Changes to the supported operating systems and architect ...
- java基础76 web服务器之Tomcat服务器
(注:本文是以“压缩版Tomcat”为例,展开描述的) 一.Tomcat服务器的介绍 1.服务器 1.1.服务器的种类 从物理上讲:服务器就是一台pc机器.至少8核/8G以上.内存至少用T来计算.宽带 ...
- P2733 家的范围 Home on the Range
又是一校内模拟赛见的题 不知道为什么出题人怎么这么喜欢USACO的Farmer John的他的牛... 感觉这道题不是特别的难,但也不很水 同机房的神仙们都说这个题是一道二维前缀和的裸题,但我当时的确 ...
- java 判断字符串是否相等
判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在Java中可能会带来问题. java中判断字符串是否相等有两种方法: 1.用“==”运算符,该运算符表示指向字符串的引用是否相 ...
- Unix IPC之读写锁
linux中读写锁的rwlock介绍 读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁: 1,当读写锁是写加锁状态时, 在这个锁被解锁之前, 所 ...
- Linux下LAMP服务器的搭建
1.安装并配置Apache 安装apache的方法有很多种,这里选择通过yum方式进行安装,但需要Linux系统能够连接互联网,执行如下命令,安装Apache. # yum install httpd ...
- 根据后端传的时间前端js进行倒计时
一.故事背景: 1. 今天公司有个项目需求 2. 在前端页面实现一个倒计时功能 3. 初步设想:后端根据需求规定一个未来的时间,前端根据当前时间进行计算 4. 然后将时间格式化,时分秒的格式 5. 时 ...