luogu P2144 [FJOI2007]轮状病毒
随便摸一发题解算了
打表找规律
前五个答案是
1 5 16 45 121
其实是
1^2 3^2-4 4^2 7^2-4 11^2
底数就是类似于斐波那契数列,还有偶数项要减4
#include<bits/stdc++.h>
#define LL long long
#define db double
#define il inline
#define re register
using namespace std;
const int N=1e2+10;
il LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
struct Num
{
int w,a[210];
Num(){memset(a,0,sizeof(a)),w=1;}
il void print()
{
++w;
while(w>1&&!a[w]) --w;
for(int i=w;i;--i) printf("%d",a[i]);
}
Num operator + (const Num &bb) const
{
Num an;
an.w=max(w,bb.w);
for(int i=1;i<=an.w;++i) an.a[i]=a[i]+bb.a[i];
for(int i=1;i<=an.w;++i) an.a[i+1]+=an.a[i]/10,an.a[i]%=10;
an.w+=an.a[an.w+1]>0;
return an;
}
Num operator * (const Num &bb) const
{
Num an;
an.w=w+bb.w+1;
for(int i=1;i<=w;++i)
for(int j=1;j<=bb.w;++j)
an.a[i+j-1]+=a[i]*bb.a[j];
for(int i=1;i<=an.w;++i) an.a[i+1]+=an.a[i]/10,an.a[i]%=10;
while(!an.a[an.w]) --an.w;
return an;
}
}a[N];
int n;
int main()
{
n=rd();
a[1].a[1]=1,a[2].a[1]=3;
for(int i=3;i<=n;++i) a[i]=a[i-1]+a[i-2];
a[n]=a[n]*a[n];
if(n%2==0)
{
a[n].a[1]-=4;
for(int i=1;a[n].a[i]<0;++i) --a[n].a[i+1],a[n].a[i]+=10;
}
a[n].print();
return 0;
}
没了?
其实正解是\(Matrix-tree\)
图已经给你了,一个环然后每个点连向中间这个点,这个图的生成树个数就是答案
自己随便搞一下就真没了
然后懒得再写高精了qwq
#include<bits/stdc++.h>
#define LL long long
#define db double
#define il inline
#define re register
using namespace std;
const int N=1e2+10,mod=1e9+7; //诶嘿嘿
il LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
il LL gg(int a[N][N],int n)
{
LL ans=1;
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j)
while(a[j][i])
{
LL x=a[i][i]/a[j][i];
for(int k=i;k<=n;++k) a[i][k]-=a[j][k]*x;
ans=mod-ans;
for(int k=i;k<=n;++k) swap(a[i][k],a[j][k]);
}
for(int i=1;i<=n;++i) ans=(ans*(a[i][i]%mod+mod)%mod)%mod;
return ans;
}
int n,a[N][N];
int main()
{
n=rd();
for(int i=1;i<=n;++i) a[i][i]=3;
a[n+1][n+1]=n;
for(int i=1;i<=n;++i) --a[n+1][i],--a[i][n+1];
for(int i=1;i<n;++i) --a[i][i+1],--a[i+1][i];
--a[1][n],--a[n][1];
printf("%lld\n",gg(a,n));
return 0;
}
luogu P2144 [FJOI2007]轮状病毒的更多相关文章
- 洛谷 P2144 [FJOI2007]轮状病毒
P2144 [FJOI2007]轮状病毒 题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个\(n\)轮状基由圆环上\(n\)个不同的基原子和圆心的一个核原子构成.\(2\)个原子之 ...
- 洛谷P2144 [FJOI2007]轮状病毒
可以用Matrix-Tree定理,然而被卡精度 #include<cstdio> #include<cstdlib> #include<algorithm> #in ...
- P2144 [FJOI2007]轮状病毒
题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间的信息通道,如图1. n轮状病毒的产生规律 ...
- 【洛谷】2144:[FJOI2007]轮状病毒【高精度】【数学推导??(找规律)】
P2144 [FJOI2007]轮状病毒 题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间 ...
- 【bzoj1002】[FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4381 Solved: 2393[Submit][Statu ...
- 【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
1002: [FJOI2007]轮状病毒 Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同 ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- 生成树的计数(基尔霍夫矩阵):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 ...
随机推荐
- poj1845 Sumdiv
poj1845 Sumdiv 数学题 令人痛苦van分的数学题! 题意:求a^b的所有约数(包括1和它本身)之和%9901 这怎么做呀!!! 百度:约数和定理,会发现 p1^a1 * p2^a2 * ...
- .Net Core Nlog日志记录到MySql
前段时间想要实现这个功能网上找了很多资料,现在整理一下发布出来,希望给大家一点帮助. 首先是依赖项的选择: 关于NLog版本不是最新是因为最新版本有点问题我试了试不支持,所以选了这几个版本,MySql ...
- 第十四节、FAST角点检测(附源码)
在前面我们已经陆续介绍了许多特征检测算子,我们可以根据图像局部的自相关函数求得Harris角点,后面又提到了两种十分优秀的特征点以及他们的描述方法SIFT特征和SURF特征.SURF特征是为了提高运算 ...
- (大数 string easy。。。)P1781 宇宙总统 洛谷
题目背景 宇宙总统竞选 题目描述 地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统. 输入输出格式 输入格式: pr ...
- Mac iOS Mac Watch 应用和游戏编程开发工具推荐
今日分享「iOS / Mac / Watch 应用和游戏开发工具」推荐,这期专题主要为iOS开发者推荐一些优秀的设计和开发工具,这些工具包含移动原型的设计.程序的开发等,可以大大提高开发的效率!专题会 ...
- CodeForces1051E EXKMP + 线段树dp
http://codeforces.com/problemset/problem/1051/E 题意:给你一个很大的数字,然后你可以把这个数字拆分成为任意多个部分,要求每一个部分的数字大小要在一个区间 ...
- label与input之间的对应
实现点击文字对应的框可以被选中,再点击一下文字框又取消选中 label的for属性与input的id属性值对应,即可实现.
- 最接近原点的K个点
一.题目描述 我们有一个由平面上的点组成的列表 points.需要从中找出 K 个距离原点 (0, 0) 最近的点 这里,平面上两点之间的距离是欧几里德距离 你可以按任何顺序返回答案.除了点坐标的顺序 ...
- my live health
s 盐城的社保咨询服务热线电话:12333 射阳县医疗保险基金中心地址:射阳县合德镇解放东路24号 电话:0515-82322433 社保办事指南:http://yancheng.bendibao.c ...
- jmeter(高并发测试)
1.首先jmeter需要JDK8以上得运行环境 2.下载jmeter,官方网址:http://jmeter.apache.org/download_jmeter.cgi 3.安装jmeter.jmet ...