首页 > 代码库 > hdu 1027 Ignatius and the Princess II(正、逆康托)
hdu 1027 Ignatius and the Princess II(正、逆康托)
题意:
给N和M。
输出1,2,...,N的第M大全排列。
思路:
将M逆康托,求出a1,a2,...aN。
看代码。
代码:
int const MAXM=10000;int fac[15];int ans[1005];int kk;int n,m;vector<int> pq;int main(){ int cn=0; fac[0]=1; while(1){ ++cn; fac[cn]=fac[cn-1]*cn; if(fac[cn]>MAXM){ --cn; break; } } while(cin>>n>>m){ pq.clear(); rep(i,1,n) pq.push_back(i); int a; kk=0; --m; rep2(i,n-1,0){ if(i>cn){ a=0; ans[++kk]=pq.at(a); pq.erase(pq.begin()+a,pq.begin()+a+1); }else{ a=m/fac[i]; m%=fac[i]; ans[++kk]=pq.at(a); pq.erase(pq.begin()+a,pq.begin()+a+1); } } printf("%d",ans[1]); rep(i,2,kk) printf(" %d",ans[i]); cout<<endl; } return 0;}
hdu 1027 Ignatius and the Princess II(正、逆康托)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。