列表

详情


NC208006. 签到题

描述

在1-n之间随机生成长度为n的整数序列,请问正好含有n-1个不同的整数的方案数,答案mod 1e9+7

输入描述

多组输入,每个文件不超过2000组
一行,一个正整数n(1 <= n <= 1e5)

输出描述

一行,一个整数,即方案数

示例1

输入:

1
2

输出:

0
2

原站题解

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

C++14(g++5.4) 解法, 执行用时: 6ms, 内存消耗: 1268K, 提交时间: 2020-06-21 15:50:46

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod=1e9+7;
LL n,f[100010]={1};

int main(){
    for(int i=1;i<=1e5;i++) f[i]=f[i-1]*i%mod;
    while(~scanf("%lld",&n)){
        printf("%lld\n",f[n]*(n*(n-1)/2%mod)%mod);
    }
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 11ms, 内存消耗: 1356K, 提交时间: 2020-06-23 12:39:36

#include<bits/stdc++.h>
using namespace std;

const int mod=1e9+7; 
long long i,n,A[100005];
int main()
{
    for(A[0]=i=1;i<=1e5;i++)A[i]=A[i-1]*i%mod;
	while(~scanf("%lld",&n))printf("%lld\n",n*(n-1)/2%mod*A[n]%mod);
}

Python3 解法, 执行用时: 112ms, 内存消耗: 8776K, 提交时间: 2022-04-05 20:21:26

f=[1,1,2]
mod=int(1e9+7)
for i in range(3,int(1e5+1)):
    f.append(i*f[i-1]%mod)

while True:
    try:
        n=int(input())
        print(f[n]*n*(n-1)//2%mod)
    except:
        break

上一题