NC14731 逆序对
NC14731 逆序对
题目
题目描述
求所有长度为 \(n\) 的 \(01\) 串中满足如下条件的二元组个数:
设第 \(i\) 位和第 \(j\) 位分别位 \(a_i\) 和 \(a_j\) \((i<j)\) ,则 \(a_i=1,a_j=0\) 。
答案对1e9+7取模。
输入描述
输入一个 \(n\) 。
输出描述
输出答案对1e9+7取模
示例1
输入
3
输出
6
说明
备注
\(n \leq 10^{18}\)
题解
思路
知识点:数学,快速幂。
推个公式,设\(f(n)\) 是长度为 \(n\) 时的逆序对总数,推导如下:
因为长度加一,则可以认为首位 \(1\) 和 \(0\) 与 \(n-1\) 情况的排列组合。由于 \(10\) 两种情况,那么 \(f(n-1)\) 会出现两次; \(1\) 和 \(n-1\) 所有情况的 \(0\) 都会产生一组逆序对,所以只要求出 \(n-1\) 时 \(0\) 出现次数,一共有 \(2^{n-1}\) 种长度为 \(n-1\) 的串数字,则数字总数是 \((n-1)2^{n-1}\) ,注意到 \(1\) 和 \(0\) 各占一半,则 \(0\) 的总数是 \((n-1)2^{n-2}\) 。
综上有 \(f(n) = 2f(n-1) + (n-1)2^{n-2}\),解递推得公式 \(f(n) = \frac{n(n-1)}{2}\cdot 2^{n-2}\) 。
用快速幂运算,注意 \(n=1\) 的特殊情况,以及取模问题,\(500000004 \cdot 2 \equiv 1 (mod \ 1000000007)\)。
时间复杂度 \(O(\log n)\)
空间复杂度 \(O(1)\)
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod = 1e9 + 7;
ll qpow(ll a, ll k) {
ll ans = 1;
while (k) {
if (k & 1) ans = a * ans % mod;
k >>= 1;
a = a * a % mod;
}
return ans;
}
///用不着分治,解递推得到通项
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
ll n;
cin >> n;
int ans = (n % mod) * ((n - 1) % mod) % mod * 500000004 % mod * qpow(2, max(n - 2, 0LL)) % mod;
cout << ans << '\n';
return 0;
}
NC14731 逆序对的更多相关文章
- 【CQOI2011】动态逆序对 BZOJ3295
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
- CH Round #72 奇数码问题[逆序对 观察]
描述 你一定玩过八数码游戏,它实际上是在一个3*3的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这3*3的网格中. 例如:5 2 81 3 _4 6 7 在游戏过程中,可以把空格与其上 ...
- POJ3928Ping pong[树状数组 仿逆序对]
Ping pong Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3109 Accepted: 1148 Descrip ...
- NOIP2013火柴排队[逆序对]
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- bzoj 3295 动态逆序对 CDQ分支
容易看出ans[i]=ans[i-1]-q[i],q[i]为删去第i个数减少的逆序对. 先用树状数组算出最开始的逆序对,预处理出每个数前边比它大的和后边比它小的,就求出了q[i]的初始值. 设b[i] ...
- 诸城模拟赛 dvd的逆序对
[题目描述] dvd是一个爱序列的孩子. 他对序列的热爱以至于他每天都在和序列度过 但是有一个问题他却一直没能解决 给你n,k求1~n有多少排列有恰好k个逆序对 [输入格式] 一行两个整数n,k [输 ...
- 归并求逆序数(逆序对数) && 线段树求逆序数
Brainman Time Limit: 1000 MS Memory Limit: 30000 KB 64-bit integer IO format: %I64d , %I64u Java c ...
- BZOJ 3295: [Cqoi2011]动态逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3865 Solved: 1298[Submit][Sta ...
- BZOJ 3295 【Cqoi2011】 动态逆序对
Description 对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数.给\(1\)到\(n\)的一个排列,按照某种顺序依 ...
随机推荐
- Persistent Bits - 题解【二进制】
题面: WhatNext Software creates sequence generators that they hope will produce fairly random sequence ...
- 记一次sql注入的解决方案
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 本文在公众号文章已同步,还有各种一线大厂面试原题.我的学习系列笔记. 今天业务提了个模糊查询,一听就知道这种问题有坑,肯定涉及到sql注入, ...
- Linux和kali Linux 介绍
常用的渗透测试平台 CTFTools kali (近亲 Ubuntu) Parrot Security OS PentestBox --由印度人开发,运行在Windows下的渗透测试环境 kali L ...
- 数据交换格式 JSON
1. 什么是 JSON 概念 : JSON 的英文全称是 JavaScript ObjEct Notation, 即 "JavaScript 对象表示法" . 简单来讲 : JSO ...
- 微服务生态组件之Spring Cloud OpenFeign详解和源码分析
Spring Cloud OpenFeign 概述 Spring Cloud OpenFeign 官网地址 https://spring.io/projects/spring-cloud-openfe ...
- RestFul和控制器
RestFul和控制器 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. 在Spring MVC中 ...
- 虚拟机中CentOS-7.9的硬盘空间扩容(EXSI)
目录 一.增加虚机容量 二.创建新的分区 三.格式化新分区 四.lvm实现卷扩容 五.文件系统的扩容 大家好,我是LSF,发现一台虚机上 /dev/mapper/centos-root Use%已经快 ...
- Nginx报错收集
在安装完成ngixn之后,访问页面显示空白,报错信息里面有这一条报错信息: tailf /usr/local/nginx/logs/error.log 2018/10/26 10:58:00 [err ...
- linux篇-tomcat:Cannot find /usr/local/tomcat1/bin/setclasspath.sh
首先看下报错代码: Cannot find /usr/local/tomcat1/bin/setclasspath.sh This file is needed to run this program ...
- 103_Power Pivot 透视表中空白标签处理及百分比
焦棚子的文章目录 请点击下载附件 1.案例来源于不断变化的需求 事实表:销售表 维度表:城市表 销售表和城市建立多对一的关系 如图1: 图1 2.插入透视表 如图2: 图2 3.问题 1.销售表中,城 ...