【每日一题】逆序对

链接:https://ac.nowcoder.com/acm/problem/14731
来源:牛客网

题目描述

求所有长度为n的01串中满足如下条件的二元组个数: 设第i位和第j位分别位ai和aj(i<j)ai 和 aj(i<j)ai和aj(i<j),则ai=1,aj=0a_i=1,a_j=0ai​=1,aj​=0。 答案对1e9+7取模。
输入描述:
输入一个n。
输出描述:
输出答案对1e9+71e9+71e9+7取模
示例1

输入

3
输出

6

说明
备注:
n<=1018n <= 10^{18}n<=1018

要组成一对逆序对,那么随机从n个位置任取两个,前面位置放1,后面位置放0,就组成一个逆序对,所以简单的排列组合,答案为C(n,2)C(n,2)C(n,2)。n个位置固定了两个位置了,还剩下n-2个位置,每个位置可以放0或者1,就有2n−22^{n-2}2n−2种可能,所以最后的答案为C(n,2)∗2n−2C(n,2)*2^{n-2}C(n,2)∗2n−2=n∗(n−1)∗2n−3n*(n-1)*2^{n-3}n∗(n−1)∗2n−3,用快速幂+快速乘优化即可。要注意这里是2n−32^{n-3}2n−3,所以如果n==1/n==2的话(n-3)就会小于0,所以要特判为0和1。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cmath>
#include<vector>
#define ls (p<<1)
#define rs (p<<1|1)
//#define mid (l+r)/2
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
//#define int __int128
using namespace std;
typedef long long ll;//全用ll可能会MLE或者直接WA,试着改成int看会不会A
const ll N=1e5+7;
const ll INF=1e10+9;
const ll mod=1e9+7;
const double EPS=1e-10;//-10次方约等于趋近为0
const double Pi=3.1415926535897;
inline ll qmul(ll x,ll y,ll p)
{ll z=(long double)x/p*y;ll res=(unsigned long long)x*y-(unsigned long long)z*p;return (res+p)%p;
}
inline ll qpow(ll a,ll b)
{ll res=1;while(b){if(b&1)res=qmul(res,a,mod);a=qmul(a,a,mod);b>>=1;}return res%mod;
}
ll n;
int main()
{scanf("%lld",&n);if(n==1)puts("0");else if(n==2)puts("1");else printf("%lld\n",qmul(qmul(qpow(2,n-3),n,mod),n-1,mod));return 0;
}

老规矩,官方题解奉上:


活动链接:https://ac.nowcoder.com/discuss/408534

【牛客每日一题】4.16 逆序对 ( 数学 , 排列组合 ,快速幂 , 快速乘 )相关推荐

  1. 力扣牛客每日刷题(Python解法持续更新)

    力扣牛客每日刷题(持续更新) 初试结束第15天, 之前简单的处理了部分毕设方面的任务, 对接下来的学习做了个简单的规划 决定每天开始刷几道力扣题提高一下算法的理解,不能让之前学的数据结构都忘记了 每道 ...

  2. 【牛客每日一题】4.15 Treepath 题解(树上dfs/树形DP)

    题目链接:https://ac.nowcoder.com/acm/problem/14248 来源:牛客网 题目描述 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x ...

  3. 【牛客每日一题】 4.13 Xorto(前缀异或和,枚举优化/映射)

    链接:https://ac.nowcoder.com/acm/problem/14247 来源:牛客网 题目描述 给定一个长度为n的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为 ...

  4. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆

    链接:https://ac.nowcoder.com/acm/problem/50439 来源:牛客网 ACM在线模板 今天才发现牛客推出了一个每日一题的版块,3月25号就开始了,今天才发现,赶紧补救 ...

  5. 牛客每日一题3.31 城市网络 树上倍增

    牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一个树状的城市网络(即 n 个城 ...

  6. 牛客每日一题系列(持续更新)

    均由Java实现 题目 奇数位上都是奇数位或偶数位上都是偶数位 有假币 最难的问题 因子个数 分解因数 斐波那契凤尾 剪花布条 客似云来 收件人列表 养兔子 年会抽奖 数据库连接池 mkdir 发邮件 ...

  7. 数学考试(牛客每日一题)变形一

    题意 给一个长度为n的区间,找两个不相交的区间,区间的长度不确定. 思路 这个题和数学考试那一题唯一不同的是区间的长度不确定了. 在数学考试那个题中,我们是记录了一个maxn[i] 来表示i~n中的区 ...

  8. (牛客每日一题)[SHOI2008]小约翰的游戏JOHN(Anti-Nim)

    这是一道裸Anti-Nim游戏 先手必胜条件(满足下面两个其中一个就行): *每一块石子的数量都为1,且总SG值为0时 *至少有一块石子的数量大于1,且 总SG值不为0时 #include <b ...

  9. 『牛客|每日一题』走迷宫

    ​ 活动地址:CSDN21天学习挑战赛

最新文章

  1. 账号管理工具_短视频矩阵管理工具,多个账号同步管理
  2. 服务器无线网卡驱动程序,在Ubuntu里使用Windows的无线网卡驱动程序的方法教程...
  3. 第 21 章 radiusd - Authentication, Authorization and Accounting server
  4. 如何显示服务器上的图片,显示服务器上的图片怎么写
  5. SAP UI5 jQuery.sap.getModulePath 的工作原理
  6. “盛大文学”年终派对
  7. 2018.09.16 loj#10243. 移棋子游戏(博弈论)
  8. ps学习1:去除图片上的文字
  9. 信息学奥赛C++语言:学生人数
  10. bzoj4332;vijos1955:JSOI2012 分零食
  11. 创维广电服务器无线,创维电视有线联网和无线联网的两种方法分享!
  12. 基于激光雷达的3D实时车辆跟踪
  13. win10系统dnf安装不上服务器失败,win10系统玩dnf图表系统组建失败怎么修复
  14. html上自动显示汉字拼音,今天才知道,原来html上用这个标签显示拼音
  15. python调用foxmail 发邮件_使用Python发送邮件
  16. 计算机毕业设计Java河池市旅游信息系统(源码+系统+mysql数据库+lw文档)
  17. 跨国项目要注意时区问题
  18. 破解服务中共性问题的繁琐处理方式——接入 API 网关
  19. excel单元格内容拆分_Excel中把一个单元格内容拆分到多个单元格内的两种方法...
  20. SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?

热门文章

  1. 12个深度学习面试问题
  2. 干货 | 基于特征的图像配准用于缺陷检测
  3. 高精度地图量产难,四维图新利用优势准备实现突破
  4. 报错——StackOverflowError
  5. 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容...
  6. Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例
  7. 证券期货交易高并发模型
  8. 【UVALive 4642】Malfatti Circles(圆,二分)
  9. [Head First设计模式]身边的设计模式——适配器模式
  10. RequireJS示例