首页 > 代码库 > 算法训练 JAM计数法 生成组合+模拟
算法训练 JAM计数法 生成组合+模拟
http://lx.lanqiao.cn/problem.page?gpid=T94
题意:给出s,t,w<=26 string由s,t组成的w位递增字符,给出string 求出它之后的5个递增排列
最大字符为t,生成下一个排列,模拟t进制+1即可,因为排列要严格递增 第j个字符最大为‘a‘+t -(w-j) 第j个字符+1后,生成b[j]开头的最小递增字典序,从该位至末位字母递增,公差为1
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e3+20; int s,t,w; char a[N],b[N]; void solve() { strcpy(b,a); int j,i=w,count=0; while(--i>=0) { j=i; while(b[j]+1 <= ‘a‘+t-(w-j))//第j个字符的最大值 { b[j]+=1; while(++j<w) { b[j]=b[j-1]+1;//后面+1,该递增字典序最小. } count++; printf("%s\n",b); if(count==5) return; j=w-1;//递增后,每次最后一位+1 } i=j; } } int main() { while(cin>>s>>t>>w) { scanf("%s",a); solve(); } return 0; }
算法训练 JAM计数法 生成组合+模拟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。