根據打表可得,對於n的情況

任意一個首位!=1的排列時,則其答案-1可以與首位為1的情況對應

當n=4時

排列 答案

1 2 3 4 ------ 0

1 2 4 3 ------ 1

1 3 2 4 ------ 1

1 3 4 2 ------ 2

1 4 2 3 ------ 2

1 4 3 2 ------ 1

2 1 3 4 ------ 1

2 1 4 3 ------ 2

2 3 1 4 ------ 2

2 3 4 1 ------ 3

2 4 1 3 ------ 3

2 4 3 1 ------ 2

3 1 2 4 ------ 2

3 1 4 2 ------ 3

3 2 1 4 ------ 1

3 2 4 1 ------ 2

3 4 1 2 ------ 2

3 4 2 1 ------ 3

4 1 2 3 ------ 3

4 1 3 2 ------ 2

4 2 1 3 ------ 2

4 2 3 1 ------ 1

4 3 1 2 ------ 3

4 3 2 1 ------ 2

記f[i]表示i個數,所有i個數可以組成的排列的答案總和

則我們發現,有(n-1)(n-1)!項首位不等於1的排列,對答案有1的貢獻

除此之外,我們會發現,首項為1的數由於有n個數(包括自己)與其對應

所以對答案有n
f[i-1]的貢獻

所以f[i]=if[i-1]+(i-1)(i-1)!

注意要逆元

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mo 998244353ll
ll t,f[10000010],n,jc[10000010];
ll qp(ll x,ll y){
	ll r=1;
	x%=mo;
	while(y){
		if(y&1)r=r*x%mo;
		y>>=1;
		x=(x*x)%mo;
	}
	return r;
}
int main(){
	freopen("inverse.in","r",stdin);
	freopen("inverse.out","w",stdout);
	jc[0]=1;
	for(ll i=1;i<=10000010;i++)
		jc[i]=jc[i-1ll]*i%mo;
	for(ll i=1;i<=10000010;i++)
		f[i]=(i*f[i-1ll]%mo+(i-1ll)*jc[i-1ll]%mo)%mo;
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&n);
		printf("%lld\n",f[n]*qp(jc[n],mo-2ll)%mo);
	}
}

jzoj5931的更多相关文章

随机推荐

  1. 201621123008《Java程序设计》第七周学习总结

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 监听,事件源,事件,注册. 1.2 任意编写事件处理 ...

  2. tp5在apache下能访问,但放到nginx下报404

    index index.php index.html index.htm; if ( -f $request_filename) { break; } if ( !-e $request_filena ...

  3. jquery获取radio单选框的值

    1.获取原有单选框的值 var value=$("input[name='is_setting']:checked").val(); 2.获取重选后的单选框的值 <tr> ...

  4. doctotext

    文档解析库 http://www.it610.com/article/1936051.htm

  5. asp.net状态保持

    1.首先如果不是asp.net webform而只是一个纯粹的html页面和ashx一般处理程序的话,因为http协议的无状态,每一次的页面请求都会重新实例化一个页面对象(注意实例化页面对象其实是通过 ...

  6. 数据帮助类DBhelper的定义

    数据库帮助类的使用DBhelperusing System;using System.Collections.Generic;using System.Text;using System.Data;u ...

  7. vue的过滤器

    Vue.Js 提供了强大的过滤器API,能够对数据进行各种过滤处理,返回需要的结果 vue的过滤器一般在JavaScript 表达式的尾部,由“|”符号指示: 过滤器可以让我们的代码更加优美,一般可以 ...

  8. tomcat中如何配置虚拟路径

    第一步:打开server.xml配置文件.在Host节点里写上该行代码: <Context path="/upload" docBase="E:\upload&qu ...

  9. 2018.07.04 POJ 1696 Space Ant(凸包卷包裹)

    Space Ant Time Limit: 1000MS Memory Limit: 10000K Description The most exciting space discovery occu ...

  10. 将IP地址转化为整数

    $ip = 'IP地址';echo $intip = sprintf('%u',ip2long($ip)); //转换为无符号整型echo long2ip($intip);//将整型转换为ip