Codeforces 1091D New Year and the Permutation Concatenation

   https://codeforces.com/contest/1091/problem/D

题目:

Let n be an integer. Consider all permutations on integers 1 to n in lexicographic order, and concatenate them into one big sequence p. For example, if n=3, then p=[1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1]. The length of this sequence will be n⋅n!n⋅n!.

Let 1≤i≤j≤n⋅n!be a pair of indices. We call the sequence (pi,pi+1,…,pj−1,pj) a subarray of pp. Its length is defined as the number of its elements, i.e., j−i+1. Its sum is the sum of all its elements, i.e., ∑jk=ipk.

You are given n. Find the number of subarrays of p of length n having sum n(n+1)/2. Since this number may be large, output it modulo 998244353 (a prime number).

Input

The only line contains one integer n (1≤n≤106), as described in the problem statement.

Output

Output a single integer — the number of subarrays of length nn having sum n(n+1)/2, modulo 998244353.

Examples

Input1

3

Output1

9

Input2

4

Output2

56

Input3

10

Output3

30052700

Note

  

In the first sample, there are 16 subarrays of length 3. In order of appearance, they are:

[1,2,3], [2,3,1], [3,1,3], [1,3,2], [3,2,2] [2,2,1], [2,1,3], [1,3,2], [3,2,3], [2,3,1], [3,1,3], [1,3,1], [3,1,2], [1,2,3], [2,3,2], [3,2,1].

Their sums are 6, 6, 7, 6, 7, 5, 6, 6, 8, 6, 7, 5, 6, 6, 7, 6. As n(n+1)/2=6, the answer is 9.

分析:

  这道题题意挺明确的,输入一个n,然后把长度为n,初始值为1的连续递增的数列进行全排列然后排在一块,再找其中连续的n个数,要求这n个数必须是1-n。

  题意就是这样那么就分析:

  暴力,呵呵呵呵,祝你好运

  看到只输入一个数n,第一反应就是oeis

  

  无果,遂自寻规律

  此处应该有规律

~10是
         

  当然这个在一开始做的时候是绝对绝对不知道的

  于是手推

  推大概n=5的时候395还没有太大的问题,分成第一个数字是12345可以分成五份,然后用全排列打个小程序,看看规律

  首先一个很显然的事实:

  当全排列第一个数字是1和全排列第一个数字是2的凑在一块,是肯定无法实现1-n的排列的

  所以我们可以把整体分为n份,此为第一个结论

  然后分析每一块

  先以n=3开始

  全排列是

  123132

  显然123 132 是两个,也就是组成这个大数列P的是肯定必须都满足条件

  然后就是231,此为第一个全排列的第二个数开始,这是重中之重

  第二个全排列的第二个数后面没有后继的数,遂作罢

  当n=4时,

  1234 1243 1324 1342 1423 1432

  首先显然的是6个

  其次就是每个全排列的第二个数和后面的n-1个数组成的都是成立的

  这些是5个

  然后每个全排列的第三个数开始的长度为n的数列成立的是3个

  这时候可能会有一丝丝思路,但不明确

  当n=5的时候

  写出来有点小多啊。。。。

  那就用程序跑

  截取我输出的结果

  


  首先的24个是跑不了

  然后接下来的23也跑不了

  再往下看,,就有些神奇了

  此时应该关注每个全排列的第三个数

  第三个数和第四第五个数,用竖着看的方式,会发现当前两个数固定,就是后面在进行全排列!(废话这是全排列的性质)

  那么我们可以分析出来这24个中,5个成立的,1个不成立的,5个成立的,1个不成立的

  咦居然有周期

  试试第四个数

  1,1,1,1,1

  也就是成立和不成立交叉着

  那么和第四个数相匹配,那是什么?

  23+1 = 24

  5+1 = 6

  1+1 = 2

  这不就是阶乘吗!

  然后再用心钻研那么一点点

  ((n-1)!+(n-1)!*((n-2)!-1)/(n-2)!+(n-1)!*((n-3)!-1)/(n-3)!···)*n

  讲真这里还不如自己手写一下然后看代码

  对了除法取模要用逆元

  

  这道题你要说不会做以后遇到怎么办,我只能说多练数学题,培养对数学的感觉,就是这样

 AC代码

 #include <stdio.h>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <time.h>
#include <queue>
#include <string.h>
#define sf scanf
#define pf printf
#define lf double
#define ll long long
#define p123 printf("123\n");
#define pn printf("\n");
#define pk printf(" ");
#define p(n) printf("%d",n);
#define pln(n) printf("%d\n",n);
#define s(n) scanf("%d",&n);
#define ss(n) scanf("%s",n);
#define ps(n) printf("%s",n);
#define sld(n) scanf("%lld",&n);
#define pld(n) printf("%lld",n);
#define slf(n) scanf("%lf",&n);
#define plf(n) printf("%lf",n);
#define sc(n) scanf("%c",&n);
#define pc(n) printf("%c",n);
#define gc getchar();
#define re(n,a) memset(n,a,sizeof(n));
#define len(a) strlen(a)
#define LL long long
#define eps 1e-6
using namespace std;
const ll mod = ;
ll pow_quick(ll a,ll b){
ll r = ,base = a;
while(b){
if(b & ){
r *= base;
r %= mod;
}
base *= base;
base %= mod;
b >>= ;
}
return r;
} ll a[];
int main() {
ll n;
sld(n)
if(n == ){
p() pn return ;
}
a[] = 1ll;
for(ll i = ; i <= n; i ++){
a[i] = a[i-]*i;
a[i] %= mod;
}
ll sum = a[n-];
//pld(sum) pn
for(ll i = ; i <= n; i ++){
ll x = (a[n-]*pow_quick(a[i-],mod-))%mod;
x *= a[i-]-;
x %=mod;
sum += x;
sum %= mod;
}
pld((sum*(n))%mod) pn
return ;
}

  代码链接:https://codeforces.com/contest/1091/submission/47758982

  

Codeforces 1091D New Year and the Permutation Concatenation 找规律,数学 B的更多相关文章

  1. Codeforces D. Little Elephant and Interval(思维找规律数位dp)

    题目描述: Little Elephant and Interval time limit per test 2 seconds memory limit per test 256 megabytes ...

  2. Codeforces Good Bye 2018 D (1091D) New Year and the Permutation Concatenation

    题意:给n!个n的排列,按字典序从小到大连成一条序列,例如3的情况为:[1,2,3, 1,3,2, 2,1,3 ,2,3,1 ,3,1,2 ,3,2,1],问其中长度为n,且和为sum=n*(n+1) ...

  3. Codeforces Round #347 (Div. 2) C. International Olympiad 找规律

    题目链接: http://codeforces.com/contest/664/problem/C 题解: 这题最关键的规律在于一位的有1989-1998(9-8),两位的有1999-2098(99- ...

  4. Codeforces Round #327 (Div. 2) C. Median Smoothing 找规律

    C. Median Smoothing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/591/p ...

  5. codeforces#1136 C. Nastya Is Transposing Matrices(找规律)

    题意:给出两个n*m的矩阵,每次操作可以让一个正方形矩阵行列交换.问,在无限次操作下,第一个矩阵能否变成第二个矩阵 分析:先把操作限定在2*2的矩阵中.这样对角线上的元素就可以随意交换.也就是说,如果 ...

  6. codeforces D. Queue 找规律+递推

    题目链接: http://codeforces.com/problemset/problem/353/D?mobile=true H. Queue time limit per test 1 seco ...

  7. HDU 5753 Permutation Bo (推导 or 打表找规律)

    Permutation Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...

  8. Codeforces Gym 100114 A. Hanoi tower 找规律

    A. Hanoi tower Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descript ...

  9. Tetrahedron(Codeforces Round #113 (Div. 2) + 打表找规律 + dp计数)

    题目链接: https://codeforces.com/contest/166/problem/E 题目: 题意: 给你一个三菱锥,初始时你在D点,然后你每次可以往相邻的顶点移动,问你第n步回到D点 ...

随机推荐

  1. 【399】jupyter 修改主题

    参考:Jupyter 主题更换 参考:Restoring default theme #86 修改主题的方法: 首先在 cmd 上输入 jt -l 选择自己需要的主题,如 jt -t monokai ...

  2. o2o、c2c、b2c、b2b、b2b2c都是什么?

    o2o:线上线下,如线上消费,线下享受服务,o2o是不需要物流的,是线上购买的东西,自己去线下获得.c2c:个人对个人,消费者与消费者之间的小成本交易,买卖双方都不是公司,如你在咸鱼上卖自己的东西.b ...

  3. 最大矩阵(简单DP)

    见题: 很水的一题,数据范围太小,前缀和加爆搜就行. #include<bits/stdc++.h> using namespace std; ; ,m,n,sum[maxn][maxn] ...

  4. sql server数据库文件的迁移(mdf&ldf文件)

    mdf 源文件 ldf 日志文件 在服务器不同磁盘目录内做迁移.移动用户数据库文件的情况大致有下面一些: ① 没有设计规划好,贪图方便,,,,数据库文件和日志文件增长过快,导致存放数据库文件的磁盘空间 ...

  5. pl/sql报错快速解决方法(新手推荐)

    一:简介 今天登录数据库时莫名报了个奇怪的错:ORA-01033: ORACLE initialization or shutdown in progress可能是昨天匆忙电脑没正常关机导致的... ...

  6. pandas列操作集锦

    列操作 pandas的列操作 数据准备: 增 将两张表合并到一起 pd.concat([page_001,page_002]).reset_index(drop=True) 默认从上到下合,如果想从左 ...

  7. python--第十五天总结(jquery)

    空格:$('parent childchild')表示获取parent下的所有的childchild节点,所有的子孙. 大于号:$('parent > child')表示获取parent下的所有 ...

  8. Winform 时间

    using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawi ...

  9. k8s 网络模型

    一.前言 k8s对Pods之间如何进行组网通信提出了要求,k8s对集群的网络有以下要求: 所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信 所有的Nodes之间可以在不使用NAT网络地 ...

  10. HBase、MongoDB、cassandra比较

    前言 传统数据库遇到的问题,数据量很大的时候无法存储:没有很好的备份机制:数据达到一定数量开始缓慢,很大的话基本无法支撑:因此我们需要探究更加合适的数据库来支撑我们的业务. HBase 什么是HBas ...