题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110985#problem/D
打表代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main() { int p[10]; for(int i=0;i<=9;i++) { p[i]=i; } int n=6; int s=0; do { int ans=0; int maxn=0; for(int i=1;i<=5;i++) { printf("%d ",p[i]); } printf("\n"); for(int i=1;i<=n;i++) { if(maxn<p[i]) { maxn=p[i]; ans++; } } printf("%d\n",ans); s=s+ans; }while(next_permutation(p+1,p+1+n)); printf("%d\n",s); }
用到了next_permutation(p+1,p+1+n)。
AC代码:
#include<stdio.h> #include<string.h> using namespace std; #define LL __int64 #define MOD 1000000007 LL f[1000005]; double ff[1000005]; int init() { f[1]=1; ff[1]=1; LL temp=1; for(int i=2;i<=1000005;i++) { f[i]=(f[i-1]*i+temp)%MOD; temp=(temp*i)%MOD; ff[i]=ff[i-1]+1.0/(i*1.0); } } int main() { init(); int t; scanf("%d",&t); for(int i=1;i<=t;i++) { int n; scanf("%d",&n); printf("Case %d: %I64d %.6lf\n",i,f[n],ff[n]); } }