Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
29314 | M0yunAllgor1thm | 【BJ】T3 | C++ | 运行超时 | 60 | 1000 MS | 260 KB | 1456 | 2024-05-06 12:26:58 |
#include <bits/stdc++.h> #define LL long long using namespace std; const int MOD=1e9+7; int a[505]; bool app[505]; int N,M,L,R; int v[505],pos[505]; int f[20][20]; int vis[20],b[20]; LL ans=0; void dfs(int p,int prs) { if(prs>R) return; if(p==M) { for(int i=1;i<=M;i++) { for(int j=i+1;j<=M;j++) { prs+=b[i]>b[j]; } } if(prs>=L&&prs<=R) ans++; return; } for(int i=1;i<=M;i++) { if(vis[i]) continue; vis[i]=1; b[p+1]=i; dfs(p+1,prs+f[p+1][i]); vis[i]=0; } return; } int main() { // freopen("c.in","r",stdin); //freopen("c.out","w",stdout); scanf("%d %d %d",&N,&L,&R); for(int i=1;i<=N;i++) scanf("%d",&a[i]); // puts("qwq"); for(int i=1;i<=N;i++) for(int j=i+1;j<=N;j++) if(a[j]&&a[i]>a[j]) L--,R--; for(int i=1;i<=N;i++) { if(a[i]) app[a[i]]=1; else pos[++M]=i; } // puts("OvO"); M=0; for(int i=1;i<=N;i++) if(!app[i]) v[++M]=i; for(int i=1;i<=M;i++) { for(int j=1;j<=M;j++) { for(int k=1;k<pos[i];k++) f[i][j]+=(a[k]>v[j]); for(int k=pos[i]+1;k<=N;k++) if(a[k]) f[i][j]+=(a[k]<v[j]); } } // puts("^_^"); // puts(""); dfs(0,0); printf("%lld\n",ans%MOD); return 0; }