简要题意

\(\tau(\sigma)\) 表示排列 \(\sigma\) 的逆序对个数,求:

\[\sum_{i \in \operatorname{permutation(n)}}2^{\tau(i)} \bmod (10^{9}+7)
\]

\(1 \le n \le 10^{7}\)

思路

暴力序曲

首先先打一个暴力,思路是枚举全排列,然后用一个树状数组求以下逆序对。

时间复杂度 \(O((n \log n)n!)\) 请勿提交哦。

然后看看前几个 \(n\) 是多少。在我的暴力中,前 \(5\) 个 \(n\) 时,应该是:

1,3,21,315,9765

OEIS做法(非正经)

看到这种题目,你一定想到了 OEIS,它告诉你,编号是 A005329

我们不看英文描述,翻到下面,有一个章节叫做 MATHEMATICA,这是一个叫做 Mathmatica 的编程语言的源代码,第一个比较好懂,是:

a[0] = 1; a[n_] := a[n] = (2^n-1)*a[n-1]; a /@ Range[0, 14] (* Jean-François Alcover, Apr 22 2011 *)

相信大家都能看懂,它是一个 \(O(n\log n)\) 递推(默认用了快速幂)

\[A_0=1,A_n=(2^{n}-1)\cdot A_{n-1}
\]

优化

如果你写了一个 \(O(n\log n)\) 的算法,准备提交,你会喜提 \(70\) 分(考场亲测)

(也有可能是人傻常数大吧)

我们考虑优化。

对于式子 \(2^{n}\),我们也可以写一个递推来做到 \(O(1)\) 查询:

\[B_0=1,B_n=2\times B_{n-1}
\]

然后记得取模。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std; int a[10000007];
const int mod=1e9+7;
int n; int poww[10000005]; signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin>>n;
a[0]=1;
poww[0]=1;
for(int i=1;i<=n;i++){
poww[i]=(poww[i-1]*2%mod+mod)%mod;
a[i]=((poww[i]-1)*a[i-1]%mod+mod)%mod;
}
cout<<a[n]<<'\n';
return 0;
}

P8474 「GLR-R3」立春的更多相关文章

  1. [LOJ 2022]「AHOI / HNOI2017」队长快跑

    [LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因 ...

  2. 前端构建工具之gulp(一)「图片压缩」

    前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...

  3. fir.im Weekly - 如何打造 Github 「爆款」开源项目

    最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...

  4. 更新日志 - fir.im「高级统计」功能上线

    距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...

  5. Notepad++ 开启「切分窗口」同时检视、比对两份文件

    Notepad++ 是个相当好用的免费纯文本编辑器,除了内建的功能相当多之外,也支持外挂模块的方式扩充各方面的应用.以前我都用 UltraEdit 跟 Emeditor,后来都改用免费的 Notepa ...

  6. 「zigbee - 1」工欲善其事必先利其器 - IAR for 8051 IDE customization

    最近在实验室做一些 Zigbee 相关的事情,然而一直没在博客上记录啥东西,也不像原来在公司有动力在 Confluence wiki 上扯东扯西.直到前些阵子,跑到 feibit 论坛上(国内较大的一 ...

  7. 「C语言」文件的概念与简单数据流的读写函数

    写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实, ...

  8. 「C语言」Windows+EclipseCDT下的C语言开发环境准备

    之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...

  9. 如何对抗 WhatsApp「蓝色双勾」-- 3 个方法让你偷偷看讯息

    WhatsApp 强制推出新功能「蓝色双勾 (✔✔)」 ,让对方知道你已经看过讯息.一众用户反应极大,因为以后不能再藉口说未看到讯息而不回覆.究竟以后 WhatsApp 是否真的「更难用」? 幸好还有 ...

  10. FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...

随机推荐

  1. Bootstrap‘s JavaScript requires jQuery

    1.遇到的第一个问题:modal.js:6 Uncaught Error: Bootstrap's JavaScript requires jQuery at modal.js:6 2.遇到的第二个问 ...

  2. JUC(4)Callable和常用的辅助类

    1.Callable 1.可以有返回值 2.可以抛出异常 3.方法不同.run()/call() future Task 细节: 1.有缓存 2.结果可能需要等待,会阻塞 2.常用的辅助类 2.1 C ...

  3. 齐博x1如何取消某个标签的缓存时间

    标签默认会有缓存, 如果你要强制取消缓存时间的话, 可以加上下面的参数 time="-1"如下图所示 标签默认缓存时间是10分钟, 你也可以改成其它时间 比如 time=" ...

  4. python基础之数据类型总结

    一.列表 1.作用:列表主要用于存储多个数据. 2.空列表表示:li=[]或者li=list() 3.列表的索引和切片:同字符串的索引和切片,索引超出范围报错,切片超出范围不报错. list3 = [ ...

  5. React实现一个简易版Swiper

    背景 最近在公司内部进行一个引导配置系统的开发中,需要实现一个多图轮播的功能.到这时很多同学会说了,"那你直接用swiper不就好了吗?".但其实是,因为所有引导的展示都是作为np ...

  6. Python基础之面向对象:1、面向对象及编程思想

    一.人狗大战 1.需求 用代码模拟人.狗打架的小游戏 人和狗种类不同,因此双方的属性各不相同 推导一: 人和狗各有不同属性 使用字典方式储存属性较为方便,并可储存多种属性 # 1.在字典内储存'人'属 ...

  7. 禁止eslint对指定代码检测

    有时候我们引入外部文件的API时,eslint无法识别,编译的时候就会出现warn eslint是可以禁用对指定代码的检测: 单行注释 let map = new BMap.Map('map') // ...

  8. 陪你去看 Lodash.js 起步

    lodash 起步(数组) Lodash 是一个较为流行的 JavaScript 的实用工具库. 在开发过程中如果能熟练使用一些工具库提供的方法,有利于提高开发效率. 笔者从 API 上入手,不分析其 ...

  9. C语言算法入门

    2018年11月2日  leetcode的确是一个不错的网站,希望能提升自己的算法力 int* twoSum(int* nums, int numsSize, int target) { } 出现的第 ...

  10. selenium被某些网页检测不允许正常访问、登录等,解决办法

    网站通过什么方式检测 function b() { return "$cdc_asdjflasutopfhvcZLmcfl_"in u || d.webdriver } 通过上方的 ...