列表

详情


NC247049. 最值区间计数

描述


计算长度为  的所有排列中所有最大值为 且最小值为 的子区间个数,对  取模。

也就是计算



其中 是长度为 的全排列。
其中  代表艾弗森括号,即: 若  成立,取值为 ,否则为 

输入描述

第一行给定一个正整数  

输出描述

对于每组数据输出答案对  取模。

示例1

输入:

2

输出:

2

说明:

所有排列为 ,子区间只有 [1,2],[2,1] 满足条件

示例2

输入:

4

输出:

60

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 7ms, 内存消耗: 520K, 提交时间: 2022-12-18 17:31:02

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long n,res=2,i,j;
	cin>> n;
	if(n==1) res=1;
	else
	{
		for(i=5;i<=n+2;i++)
		{
			res=(res*i)%998244353;
		}
	} 
	cout<<res;
}

pypy3 解法, 执行用时: 78ms, 内存消耗: 21324K, 提交时间: 2023-06-02 22:56:58

from sys import stdin

n = int(stdin.readline())
mod = 998244353
ans = 2

if n==1:
    print(1)
else:
    for i in range(3,n+1):
        ans = ans*(i+2)%mod
    print(ans)

Python3 解法, 执行用时: 359ms, 内存消耗: 4560K, 提交时间: 2023-02-22 19:45:34

n=int(input())
ans=2
for i in range(5,n+3):
    ans=ans*i%998244353
print(ans if n!=1 else 1)

上一题