首页 > 其他分享 >B. Emordnilap【Codeforces Round #845 (Div. 2) and ByteRace 2023】

B. Emordnilap【Codeforces Round #845 (Div. 2) and ByteRace 2023】

时间:2023-01-22 12:34:11浏览次数:60  
标签:845 Emordnilap Codeforces inversions permutation test array include example

B. Emordnilap

原题链接
A permutation of length n is an array consisting of n distinct integers from 1 to n in arbitrary order. For example, [2,3,1,5,4] is a permutation, but [1,2,2] is not a permutation (2 appears twice in the array), and [1,3,4] is also not a permutation (n=3 but there is 4 in the array). There are n!=n⋅(n−1)⋅(n−2)⋅…⋅1 different permutations of length n.

Given a permutation p of n numbers, we create an array a consisting of 2n numbers, which is equal to p concatenated with its reverse. We then define the beauty of p as the number of inversions【颠倒】 in a.

The number of inversions in the array a is the number of pairs of indices i, j such that iaj.

For example, for permutation p=[1,2], a would be [1,2,2,1]. The inversions in a are (2,4) and (3,4) (assuming 1-based indexing). Hence, the beauty of p is 2.

Your task is to find the sum of beauties of all n! permutations of size n. Print the remainder we get when dividing this value by 1000000007 (109+7).

Input
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤105). The description of the test cases follows.

Each test case has only one line — the integer n (1≤n≤105).

It is guaranteed that the sum of n over all test cases does not exceed 105.

Output
For each test case, print one integer — the sum of beauties of all permutations of size n modulo 1000000007 (109+7).

Example
input
3
1
2
100
output
0
4
389456655
Note
For the first test case of the example, p=[1] is the only permutation. a=[1,1] has 0 inversions.

For the second test case of the example, the permutations are [1,2] and [2,1]. Their respective a arrays are [1,2,2,1] and [2,1,1,2], both of which have 2 inversions.

题意

  • 给出一个n,求长度为n的排列经过反转拼接后得到的数组中颠倒的数目,求出n!种排列的情况得到的总和取模1000000007的值

思路

  1. 无论是哪一种排列情况颠倒数目都是相同的(\(n*(n-1)\))
    因此无论怎么排列,每两个不同的数\(i,j\)总会是\(2\)的颠倒贡献值
    \(2*\frac{n*(n-1)}{2} = n*(n-1)\)
  • 为什么?
    我们可以只看排列中的两个元素,假设\(i<j\),则反转得到的新下标\(i_{reverse} > j_{reverse}\)
    即\(i<j < j_{reverse} < i_{reverse}\)
    ①如果\(p_i < p_j\),得到贡献为2
    ②如果\(p_i > p_j\),得到贡献为2
    因此无论怎么排列,每两个不同的数\(i,j\)总会是\(2\)的颠倒贡献值
  1. 总共有n!中排列情况
  2. 原题答案为\(n!*n*(n+1) mod 1000000007\)

代码

点击查看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;

#define X first
#define Y second

typedef long long LL;
const char nl = '\n';
const int N = 1e6+10;
LL n;
//int a[N];
int cnt[N];
int p = 1e9+7;
void solve(){
	cin >> n;
	LL res = n*(n-1)%p;
	if(n == 1)cout << 0 << nl;
	else{
		for(int i = 1; i <= n; i ++){
			res *= i;
			res %= p;
		}

		//res *= res;
		res %= p;
		cout << res << nl;
	}
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);

	int T;
	cin >> T;
	while(T --){
		solve();
	}
	//solve();
}

陌生单词

  1. indices【下标】

标签:845,Emordnilap,Codeforces,inversions,permutation,test,array,include,example
From: https://www.cnblogs.com/J-12045/p/17064348.html

相关文章

  • A. Everybody Likes Good Arrays!【Codeforces Round #845 (Div. 2) 】
    A.EverybodyLikesGoodArrays!原题链接Anarrayaisgoodifforallpairsofadjacentelements【相邻元素】,aiandai+1(1≤i<n)areofdifferentparity【奇......
  • B. Emordnilap
    B.EmordnilapApermutationoflength$n$isanarrayconsistingof$n$distinctintegersfrom$1$to$n$inarbitraryorder.Forexample,$[2,3,1,5,4]$isap......
  • Educational Codeforces Round 1 个人总结A-E
    EducationalCodeforcesRound1A.TrickySum数学,求\(1\dotsn\)的和减去小于等于n的二次幂乘2之和LLf[40];voidsolve(){ LLn; cin>>n; LLans=n+n*(n-1)/2;......
  • Codeforces Round48 Edu题解
    A-DeathNote(模拟)题意​ 现在有一本书,每页可以写下\(m\)个数字,给你一个序列\(a\),依次在书上誊写\(a_i\)个数字,请问誊写序列的第\(i\)个数的时候书翻了几页?​ ......
  • Codeforces Round #803 (Div. 2)
    题目链接A水题//Problem:A.XORMixup//Contest:Codeforces-CodeforcesRound#803(Div.2)//URL:https://codeforces.com/contest/1698/problem/A?mobile=t......
  • Codeforces Round #844 (Div. 1 + Div. 2, based on VK Cup 2022 - Elimination Round
    《C.EqualFrequencies》  这道题的题意为:一个字符串str上每个字母的数量都一样,为平衡字符串现在给出一个字符串s,问最少改动多少使s变成平衡字符串,并写出该平衡字......
  • Codeforces Round #753 (Div. 3)(ABCDE)
    A.LinearKeyboard题意:给26个字母代表你的键盘(没错你的键盘键位是一行)再给你一个字符串,问你打出这个字符串需要消耗多少距离思路:前面几个数据键位没乱当然不用......
  • Codeforces Round #804 (Div. 2)
    题目链接A核心思路也是一个观察性质的过程,但是这个性质比较简单。我们可以发现两个数相等的时候比较好构造。并且我们取另外一个数为1就好了。//Problem:A.TheThir......
  • CodeForces 1783F Double Sort II
    洛谷传送门CF传送门考虑只有一个排列怎么做。有一个结论是答案为\(n\-\)置换环个数,即每个环都会选择一个点不操作,其他点都操作。接下来考虑两个排列,显然当\(x\)在......
  • Codeforces Round #820 (Div. 3) A~F泛做
    一套题学到不少东西A.TwoElevators模拟#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definecerr(x)std::cerr<<(#x)<<"is"<<(x)<<......