bzoj 1002
表示我这种蒟蒻面对这种递推第一思想显然是打表啊
先贴个用来打表的暴力:
#include <cstdio>
struct node
{
int l,r;
}p[];
bool used[];
int f[];
int n,cnt,cct;
int findf(int x)
{
if(x==f[x])
{
return x;
}
return f[x]=findf(f[x]);
}
bool check()
{
for(int i=;i<=n+;i++)
{
f[i]=i;
}
for(int i=;i<=cct;i++)
{
if(used[i])
{
int f1=findf(p[i].l);
int f2=findf(p[i].r);
f[f2]=f1;
}
}
int ff=;
for(int i=;i<=n+;i++)
{
int f1=findf(i);
if(!ff)
{
ff=f1;
}else if(ff!=f1)
{
return ;
}
}
return ;
}
void dfs(int dep,int tot)
{
if(dep==cct+)
{
if(tot==n)
{
if(check())
{
cnt++;
}
}
return;
}
used[dep]=;
dfs(dep+,tot+);
used[dep]=;
dfs(dep+,tot);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n+;i++)
{
p[++cct].l=;
p[cct].r=i;
}
for(int i=;i<=n+;i++)
{
if(i==n+)
{
p[++cct].l=i;
p[cct].r=;
}else
{
p[++cct].l=i;
p[cct].r=i+;
}
}
dfs(,);
printf("%d\n",cnt);
return ;
}
/*
1 1
2 5
3 16
4 45
5 121
6 320
*/
实测这个打表程序是正确的(可以获得30分)
接下来是本人心路历程:
观察一下:1-1,2-5,3-16,4-45...找一下前后项吧!
观察前后项的倍数关系应该在2~3之间,那先定一个基础表达式
f[i]=2f[i-1]+...或f[i]=3f[i-1]+...
如果系数用2,发现剩下的部分长这样啊...
f[3]=2f[2]+6
f[4]=2f[3]+13
f[5]=2f[4]+31
...
好像后面的没啥规律...
那换系数用3!
f[4]=3f[3]-3
f[5]=3f[4]-14
...
好像也没啥啊...
等一下!
-3=-5+2
-14=-16+2
如果下面再写下来,应该是-43=-45+2!
这不就找出来了吗!
f[i]=3f[i-1]-f[i-2]+2!
于是敲个高精度这题就结束了...
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
struct Bignum
{
int a[10005];
int ilen;
}f[105],zero;
int n;
Bignum add(Bignum x)
{
Bignum ret=x;
ret.a[1]+=2;
int i=1;
while(ret.a[i]>=10)
{
ret.a[i+1]+=ret.a[i]/10;
ret.a[i]%=10;
i++;
}
if(ret.a[ret.ilen+1])
{
ret.ilen++;
}
return ret;
}
Bignum mul(Bignum x)
{
Bignum ret=zero;
for(int i=1;i<=x.ilen;i++)
{
ret.a[i]+=3*x.a[i];
ret.a[i+1]+=ret.a[i]/10;
ret.a[i]%=10;
}
ret.ilen=x.ilen;
while(ret.a[ret.ilen+1])
{
ret.ilen++;
}
return ret;
}
Bignum sub(Bignum x,Bignum y)
{
Bignum ret=zero;
for(int i=1;i<=y.ilen;i++)
{
ret.a[i]+=x.a[i]-y.a[i];
if(ret.a[i]<0)
{
ret.a[i]+=10;
ret.a[i+1]--;
}
}
for(int i=y.ilen+1;i<=x.ilen;i++)
{
ret.a[i]+=x.a[i];
}
ret.ilen=x.ilen;
while(!ret.a[ret.ilen]&&ret.ilen>1)
{
ret.ilen--;
}
return ret;
}
int main()
{
scanf("%d",&n);
f[1].a[1]=1;
f[1].ilen=1;
f[2].a[1]=5;
f[2].ilen=1;
f[3].a[1]=6;
f[3].a[2]=1;
f[3].ilen=2;
for(int i=4;i<=n;i++)
{
f[i]=mul(f[i-1]);
f[i]=add(f[i]);
f[i]=sub(f[i],f[i-2]);
}
for(int i=f[n].ilen;i>=1;i--)
{
printf("%d",f[n].a[i]);
}
printf("\n");
return 0;
}
bzoj 1002的更多相关文章
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- BZOJ 1002 轮状病毒
Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...
- 生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3928 Solved: 2154[Submit][Statu ...
- BZOJ 1002 [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3106 Solved: 1724[Submit][Statu ...
- BZOJ 1002: [FJOI2007]轮状病毒【生成树的计数与基尔霍夫矩阵简单讲解+高精度】
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5577 Solved: 3031[Submit][Statu ...
- BZOJ 1002 - 轮状病毒 - [基尔霍夫矩阵(待补)+高精度]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1002 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生 ...
- bzoj 1002 [FJOI2007]轮状病毒——打表找规律
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1002 看 Zinn 的博客:https://www.cnblogs.com/Zinn/p/9 ...
- BZOJ 1002 轮状病毒 矩阵树定理
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1002 题目大意: 给定n(N<=100),编程计算有多少个不同的n轮状病毒 思路 ...
- AC日记——[FJOI2007]轮状病毒 bzoj 1002
1002 思路: 打表找规律: dp[i]=dp[i-1]*3-dp[i-2]+2; 套个高精就a了: 代码: #include <cstdio> #include <cstring ...
- BZOJ 1002 [ FJOI 2007 ]
-------------------------萌萌哒分割线------------------------- 题目很容易看懂,数据范围也不大.当然可以卡过暴力的人了. 在n=1时很明显是一种,如下 ...
随机推荐
- 【Thymeleaf】浅谈Java模板引擎(带更新...)
什么是模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 为什么要用模板 ...
- Django中的csrf基础了解
简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功能有 ...
- Linxu基础知识:终端、终端模拟器、shell
实验楼课程第二个实验的讲解部分出现了三个词,我不知道它们三个是什么关系.查阅了度娘,归纳如下: - 终端: 在UNIX/LINUX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端就成为S ...
- 一言难尽的js变量提升
基础知识 在这个课题开始之前我们先做一些基础知识的讲解 1.在顶级的区域内声明的变量为 window级别的变量. 也就是说var a=100 等价于 window.a=100; 2.局部的重新声明变 ...
- android dm-verity 功能【转】
转自:https://blog.csdn.net/ee230/article/details/73348344 Android dm-verity 实现原理深入研究 思维导图: dm-verity 说 ...
- Keepalived详解(四):通过vrrp_script实现对集群资源的监控【转】
一.通过vrrp_script实现对集群资源的监控: Keepalived基础HA功能时用到了vrrp_script这个模块,此模块专门用于对集群中服务资源进行监控.与此模块一起使用的还有track_ ...
- python hmac解密
import hmac def get_singa_true(timestamp): sha1 = hmac.new("d1b964811afb40118a12068ff74a12f4&qu ...
- go学习笔记
安装 brew install go 国际惯例hello,world. 创建文件hello.go go文件的main方法为函数的主入口,必须有这个方法. hello.go package main i ...
- windowns下excel2013快速生成月报表
作者:邓聪聪 windowns下excel快速生成月报表,省去了手工复制繁琐的过程 Sub AutoCopySheets() Dim i, j As Integer i = 1 j = 11 For ...
- cocos开发学习记录
场景的创建和切换 https://blog.csdn.net/lin453701006/article/details/56334578