[BZOJ] 3301: [USACO2011 Feb] Cow Line
康拓展开/逆展开 模板
#include<algorithm> #include<iostream> #include<cstdio> #define int long long using namespace std; inline int rd(){ int ret=0,f=1;char c; while(c=getchar(),!isdigit(c))f=c=='-'?-1:1; while(isdigit(c))ret=ret*10+c-'0',c=getchar(); return ret*f; } #define space() putchar(' ') #define nextline() putchar('\n') void pot(int x){if(!x)return;pot(x/10);putchar('0'+x%10);} void out(int x){if(!x)putchar('0');if(x<0)putchar('-'),x=-x;pot(x);} const int MAXN = 24; int n,m; int fac[MAXN],a[MAXN]; int vis[MAXN],tim; void ct(int x){ x--; ++tim; for(int i=1;i<=n;i++){ int cur=x/fac[n-i],j; for(j=1;j<=n;j++){ if(vis[j]==tim)continue; if(cur==0) break; cur--; } vis[j]=tim; out(j);space(); x%=fac[n-i]; } nextline(); } void rct(){ int ans=1; for(int i=1;i<=n;i++){ int tmp=0; for(int j=i+1;j<=n;j++){ if(a[j]<a[i])tmp++; } ans+=fac[n-i]*tmp; } out(ans);nextline(); } signed main(){ n=rd();m=rd(); fac[0]=1; for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i; char s[MAXN]; int x; for(int i=1;i<=m;i++){ scanf("%s",s); if(s[0]=='P'){ x=rd(); ct(x); }else{ for(int j=1;j<=n;j++)a[j]=rd(); rct(); } } return 0; }
本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9866495.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步