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 ...
随机推荐
- goroutine与调度器
29 November 2013 by skoo 我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine.goroutine就是Go语言提供的一种用户态线程,当然这种用 ...
- JS判断手机还是电脑访问网站
function check() { let browser = navigator.userAgent;//用户访问的类型 let phone = ["Android", &qu ...
- ECharts使用心得总结
https://blog.csdn.net/whiteosk/article/details/52684053 项目中的图表形式很多,基本可以在ECharts中找到相应实例,但UI设计图中的图表跟百度 ...
- 第三十二节,使用谷歌Object Detection API进行目标检测、训练新的模型(使用VOC 2012数据集)
前面已经介绍了几种经典的目标检测算法,光学习理论不实践的效果并不大,这里我们使用谷歌的开源框架来实现目标检测.至于为什么不去自己实现呢?主要是因为自己实现比较麻烦,而且调参比较麻烦,我们直接利用别人的 ...
- python enumarate方法的使用
'''enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中.'''
- ElasticSearch6.5.0 【安装IK分词器】
不得不夸奖一下ES的周边资源,比如这个IK分词器,紧跟ES的版本,卢本伟牛逼!另外ES更新太快了吧,几乎不到半个月一个小版本就发布了!!目前已经发了6.5.2,估计我还没怎么玩就到7.0了. 下载 分 ...
- JMeter-Java压力测试工具-02
这节介绍几个Listener下面的组件 Aggregate Report-汇总报告 从左到右依次:具有相同标签的样本数.一组结果的平均时间.一组结果的中间时间(50%的样本不超过这个时间).90%的样 ...
- Codeforce 867 C. Ordering Pizza (思维题)
C. Ordering Pizza It's another Start[c]up finals, and that means there is pizza to order for the ons ...
- centos 7.4 安装gitlab
centos 7.4 安装gitlab #curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/scrip ...
- Linux记录-salt-minion安装
python -m SimpleHTTPServer 8888#!/bin/bash sed -i 's/^#//g' /etc/yum.repos.d/centos7.4.repo sed -i ' ...