BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度
题目大意:
思路:基尔霍夫矩阵求生成树个数,不会。
可是能够暴力打表。(我才不会说我调试force调试了20分钟。。。
CODE(force.cc):
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 1000
using namespace std; struct Edge{
int x,y; Edge(int _,int __):x(_),y(__) {}
Edge() {}
}edge[MAX]; int edges;
int status; int father[MAX]; int Find(int x)
{
if(father[x] == x) return x;
return father[x] = Find(father[x]);
} inline bool Unite(int x,int y)
{
int fx = Find(x);
int fy = Find(y);
if(fx != fy) {
father[fx] = fy;
return true;
}
return false;
} int main()
{
for(int i = 1; i <= 20; ++i) {
edges = 0;
for(int j = 1; j <= i; ++j)
edge[++edges] = Edge(0,j);
for(int j = 1; j < i; ++j)
edge[++edges] = Edge(j,j + 1);
edge[++edges] = Edge(i,1);
int ans = 0;
for(int j = 1; j <= (1 << edges); ++j) {
int added = 0;
for(int k = 0; k <= i; ++k)
father[k] = k;
for(int k = 0; k < edges; ++k)
added += (j >> k)&1;
if(added != i) continue;
added = 0;
for(int k = 0; k < edges; ++k)
if((j >> k)&1)
added += Unite(edge[k + 1].x,edge[k + 1].y);
ans += (added == i);
}
cout << i << ':' << ans << endl;
}
return 0;
}
打出的表是这种。。
后面的数太大了爆了。
。
非常明显能够看出奇数的数都是全然平方数。
把它们开跟,然后经过艰苦卓绝的分析之后,得到了一个递推式:
f[i] = f[i - 1] + Σf[j] + 2 (j∈[1,i - 1]),答案是f[n] ^ 2
有了这个结论,偶数的就好办了。能够看到,偶数的除以5之后也是全然平方数,和上面非常像,它的递推式是:
f[i] = f[i - 1] + Σf[j] + 1 (j∈[i,i - 1]),答案是f[n] ^ 2 * 5
至于为什么递推式长这样,谜。
CODE:
#include <cstdio>
#include <iomanip>
#include <cstring>
#include <iostream>
#include <algorithm>
#define BASE 10000
#define MAX 1010
using namespace std; struct BigInt{
int num[MAX],len; BigInt(int _ = 0) {
memset(num,0,sizeof(num));
len = _ ? 1:0;
num[1] = _;
}
BigInt operator +(const BigInt &a)const {
BigInt re;
re.len = max(len,a.len);
int temp = 0;
for(int i = 1; i <= re.len; ++i) {
re.num[i] = num[i] + a.num[i] + temp;
temp = re.num[i] / BASE;
re.num[i] %= BASE;
}
if(temp) re.num[++re.len] = temp;
return re;
}
BigInt operator *(const BigInt &a)const {
BigInt re;
for(int i = 1; i <= len; ++i)
for(int j = 1; j <= a.len; ++j) {
re.num[i + j - 1] += num[i] * a.num[j];
re.num[i + j] += re.num[i + j - 1] / BASE;
re.num[i + j - 1] %= BASE;
}
re.len = len + a.len;
if(!re.num[re.len]) --re.len;
return re;
}
}; ostream &operator <<(ostream &os,const BigInt &a)
{
os << a.num[a.len];
for(int i = a.len - 1; i; --i)
os << fixed << setw(4) << setfill('0') << a.num[i];
return os;
} int k;
BigInt f[110],g[110]; int main()
{
cin >> k;
if(k&1) {
k = (k + 1) >> 1;
f[1] = BigInt(1),f[2] = BigInt(4);
g[1] = BigInt(1),g[2] = BigInt(5);
for(int i = 3; i <= k; ++i) {
f[i] = f[i - 1] + g[i - 1] + BigInt(2);
g[i] = g[i - 1] + f[i];
}
cout << f[k] * f[k] << endl;
}
else {
k >>= 1;
f[1] = BigInt(1),f[2] = BigInt(3);
g[1] = BigInt(1),g[2] = BigInt(4);
for(int i = 3; i <= k; ++i) {
f[i] = f[i - 1] + g[i - 1] + BigInt(1);
g[i] = g[i - 1] + f[i];
}
cout << f[k] * f[k] * BigInt(5) << endl;
}
return 0;
}
BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度的更多相关文章
- BZOJ 1002 [ FJOI 2007 ]
-------------------------萌萌哒分割线------------------------- 题目很容易看懂,数据范围也不大.当然可以卡过暴力的人了. 在n=1时很明显是一种,如下 ...
- [FJOI2007]轮状病毒 题解(dp(找规律)+高精度)
[FJOI2007]轮状病毒 题解(dp(找规律)+高精度) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1335733 没什么好说的,直接把规律找出来,有 ...
- bzoj1002 [FJOI2007]轮状病毒——找规律+高精度
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1002 打表找规律,似乎是这样:https://blog.csdn.net/fzhvampir ...
- ACM_同余+暴力找规律
小光的忧伤 Time Limit: 2000/1000ms (Java/Others) Problem Description: 锴神:我尊重作者原意,你们出什么我就加什么.于是小光打了道水题(也就是 ...
- BZOJ 4706: B君的多边形 找规律
4706: B君的多边形 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4706 Description 有一个正n多边形,我们要连接一些 ...
- BZOJ 1228 E&G(sg函数+找规律)
把一对石子堆看出一个子游戏.打出子游戏的sg表找规律.. 这个规律我是一定找不出来的... 对于i,j,如果 (i-1)%pow(2,k+1) < pow(2,k) (j-1)%pow(2,k+ ...
- 【BZOJ】1002: [FJOI2007]轮状病毒(DP+规律+高精度)
http://www.lydsy.com/JudgeOnline/problem.php?id=1002 其实我还是看题解的,而且看了题解也没明白那公式怎么来的T_T,先水过了先把....以后研究一下 ...
- [BZOJ1002](FJOI 2007) 轮状病毒
[题目描述] 给定n(N<=100),编程计算有多少个不同的n轮状病毒. [输入格式] 第一行有1个正整数n. [输出格式] 将编程计算出的不同的n轮状病毒数输出 [样例输入] 3 [样例输出] ...
- ZOJ 3939 The Lucky Week (暴力找规律)
题意:给定一个幸运日,求第 k 个幸运日是多少. 析:由于闰年,每400肯定会循环一次,所以我们就可以先找出每400年会有多少幸运日,是2058个,然后再暴力. 代码如下: #pragma comme ...
随机推荐
- ZBrush中常用笔刷综合简介
单击左托盘的笔刷图标,弹出一个笔刷库,其中有许多常用笔刷,这也是许多初学者所头疼的问题,ZBrush的笔刷非常多,而且功能很强大,好多朋友不知道该选择哪一个笔刷进行雕刻.其实,在ZBrush的学习中我 ...
- requests 常见方法总结
请求设置:requests.get/post ( url, data={}, params={}, headers={}, timeout=0.01, files={} Session() ...
- ajax错误信息
XMLHttpRequest.status状态码 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx- ...
- mysql和mongodb的区别
1.mongodb的概括 MongoDB(文档型数据库):提供可扩展的高性能数据存储 2.mongodb的功能概括 (1)基于分布式文件存储 (2)高负载情况下添加更多节点,可以保证服务器性能 (3) ...
- k8s使用cephfs
以下为ceph集群操作内容 cephfs 将cephfs挂载到一台服务器 /mnt/cephf . 创建目录 mkdir -p /mnt/cephf/k8s/staff-nginx/{conf,dat ...
- quick-cocos2d-x游戏开发【2】——项目结构分析、创建新场景
创建完一个新项目之后,我们能够简单的看一看这个项目的文件组成,有这么一个文件层次结构 几个proj.*目录就不用说了,是相应的平台的解决方式,res专门存放我们的游戏资源.scripts存放我们的lu ...
- hdu5391Zball in Tina Town
//求(n-1)!%n //n 为合数,答案为0,n为素数 . 威尔逊定理可得 //判定一个自然数是否为素数的充分必要条件. 即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ) ...
- unity3d 自己主动文件更新系统
游戏内容变更之后.一般而言不会想让玩家下载整个游戏包又一次安装,由于这样会流失大量玩家.全部游戏更新是必须的. 更新的内容包含 数据.资源.代码. 基本原理: 1.将须要更新的文件打包成AssetBu ...
- Linux怎样改动root用户的password
Linux系统的root账号是很重要的一个账号.也是权限最大的一个账号,可是有时候忘了rootpassword怎么办?总不能重装系统吧,这个是下下策.事实上Linux系统中,假设忘记了root账号pa ...
- iOS之数据请求NSURLConnection
iOS之数据请求NSURLConnection NSString *lcsUrl = @"http://192.168.1.1:8080/lcsUrl"; //假设网址中有汉字.须 ...