正题

题目链接:http://noip.ybtoj.com.cn/contest/596/problem/1


题目大意

TTT组询问给出nnn求有多少个nnn的排列满足第一个是111并且相邻的差不超过222。

1≤T≤106,1≤n≤1091\leq T\leq 10^6,1\leq n\leq 10^91≤T≤106,1≤n≤109


解题思路

考虑一下如果我们要不断向前填满前面的一段的话,那么填的方案就只有两种,(x,x+1)(x,x+1)(x,x+1)和(x,x+2,x+1,x+3)(x,x+2,x+1,x+3)(x,x+2,x+1,x+3),这样一下会跳111或者333。

然后还有一种方法是一直往前跳两格然后再跳回来,但是这样就直接结束了。

设fif_ifi​表示按照最前面那两种方法铺iii个的方案,那么答案就是(∑i=1nfi)−fn−1(\sum_{i=1}^nf_{i})-f_{n-1}(∑i=1n​fi​)−fn−1​,减去n−1n-1n−1是因为会被fnf_nfn​算重。

然后矩阵乘法+分块预处理光速幂做就好了。

时间复杂度O(43(109+T))O(4^3(\sqrt {10^9}+T))O(43(109​+T))


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
#define file(x) freopen("data"#x".in","r",stdin);freopen("data"#x".out","w",stdout);
using namespace std;
const ll N=5e5+10;
struct node{ll to,next;
}a[N<<1];
ll n,m,tot=1,ls[N],fa[N],dep[N],s[N],f[N],ans,num;
vector<ll> T[N];
void addl(ll x,ll y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(ll x,ll from){dep[x]=dep[fa[x]]+1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(i==from)continue;else if(dep[y]){if(dep[y]<=dep[x])s[x]++,s[fa[y]]--;continue;}T[x].push_back(y);fa[y]=x;dfs(y,i^1);s[x]+=s[y];}num+=(s[x]==0);return;
}
void calc(ll x){f[x]=(s[x]==0);dep[x]=1;for(ll i=0;i<T[x].size();i++){ll y=T[x][i];calc(y);ans+=f[x]*dep[y]+f[y]*dep[x];dep[x]+=dep[y];f[x]+=(s[x]==0)*dep[y]+f[y];}return;
}
signed main()
{file(2);scanf("%lld%lld",&n,&m);for(ll i=1;i<=m;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);}dfs(1,0);calc(1);printf("%lld\n",n*(n-1)/2ll*num-ans);return 0;
}

Ybtoj-排列计数【矩阵乘法,分块幂】相关推荐

  1. 求解斐波那契第n项的几种解法(含矩阵乘法+快速幂) Python实现

    斐波那契数列 首先我们来定义一下斐波那契数列: f(n)={0n = 01n = 1f(n−1)+f(n−2)n > 1f(n)= \begin{cases} 0 & \text {n ...

  2. 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]

    序列计数 Time Limit: 30 Sec  Memory Limit: 128 MB [Submit][Status][Discuss] Description Alice想要得到一个长度为n的 ...

  3. [矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats

    矩阵快速幂习题 复习矩阵乘法及快速幂模板 乘法模板 快速幂模板 T1:Arc of Dream 题目 题解 code T2:Recursive sequence 题目 题解 code T3:233 M ...

  4. ZCMU-1618-骨牌覆盖(矩阵乘法+快速幂)

    1618: 骨牌覆盖1 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 264  Solved: 124 [Submit][Status][Web Bo ...

  5. Xn数列(矩阵乘法+快速幂+慢速乘法)

    Xn数列 题目描述: 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入描述: 一行 ...

  6. Luogu P3597 [POI2015]WYC___矩阵乘法快速幂+倍增

    题目大意: 给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种.将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点. 无自环 ...

  7. NOJI 148 fibonacci数列(二) 矩阵乘法二分幂

    第一次这样写以为不对的,自己撮合的着写的没想到对了,太激动了~.~ 点击打开链接 #include <stdio.h> #include <string.h> #include ...

  8. bzoj4887: [Tjoi2017]可乐(矩阵乘法+快速幂)

    题目传送门 . 解法: 这种题都是矩阵乘法吧. f[i][t]表示第t秒在i的方案. 那么f[i][t]可以转移f[i][t+1]和能够与i相连的边. 那么这个转移可以看作一个转移矩阵. 首先矩阵的( ...

  9. 【BZOJ 2323】 2323: [ZJOI2011]细胞 (DP+矩阵乘法+快速幂*)

    2323: [ZJOI2011]细胞 Description 2222年,人类在银河系外的某颗星球上发现了生命,并且携带了一个细胞回到了地球.经过反复研究,人类已经完全掌握了这类细胞的发展规律: 这种 ...

最新文章

  1. PyTorch 笔记(08)— Tensor 比较运算(torch.gt、lt、ge、le、eq、ne、torch.topk、torch.sort、torch.max、torch.min)
  2. VB.NET中的日期时间转换
  3. 几篇JVM实战的东西
  4. LVS+Keepalive 实现负载均衡高可用集群
  5. 在一台服务器上配置多个Tomcat的方法
  6. linux 系统显示很大,在Linux中可视化显示内存占用情况的方法
  7. dlut-KFQ概率上机2
  8. 本地修改PHP修改文件,PHP脚本批量修改本地文件名
  9. 索尼音乐牵手UNLEASH厂牌 实力新星LiCong李聪 Veegee正式加盟
  10. linux下protobuf-c的安装
  11. C++实现binary文件读取(可对‘bil‘,‘bsq‘ float32,double,unchar,unit16,unit8等格式进行读取)
  12. 字典生成工具 -- pydictor
  13. Unity真机调试工具:LogViewer在手机上查看Unity3D的Console Log
  14. python爬取百度图片的思路与代码(最后附上了代码)
  15. 客户的sample和项目计划
  16. Golang内存分析工具gctrace和pprof实战
  17. 一个人写一个集群:基于GRPC的golang微服务框架iogo(grpc/protobuf/etcd/freetoo/码客 卢益贵)
  18. [转]程序员收集整理的PHP资源大全,包含各种类库及框架等
  19. Navicat如何连接阿里云数据库RDS
  20. 实验:使用SSMS创建并管理数据库及其基本表

热门文章

  1. 大厂Java初级开发工程师!!!面试必问项之Set实现类:TreeSet
  2. phpfind mysql怎么用_MySQL 的 find_in_set 函数使用方法
  3. php 实现类,php如何实现类
  4. mysql列增减_Mysql基本操作——增减改查
  5. zen服务器芯片,服务器版Zen处理器简直大杀器:32核64线程,8通道DDR4内存
  6. react 最佳入门_miaov-React 最佳入门
  7. 表达式如何获取复选框的值_Nuke表达式 Expression节点讲解
  8. linux系统刷分辨率,Linux下设置其分辨率及刷新率
  9. idea怎么把代码放到git_在IDEA中如何初始化Git,把项目推送到Git上
  10. qt 从文件中读出数据显示在表格中_QT中有什么控件可以实现向excel的表格显示,qt数据存储到Excel表格...