Description
字符串 acab 含有两个 a ,一个 b ,一个 c ,和 acab 含的字母和每个字母的个数都相等的字符串还有:
aacb,baca等,因为他们也是含有两个 a ,一个 b ,一个 c 。所有满足这个性质的字符串按字典顺序排列后,
acab 是第 5 个,我们就说 acab 的序号是 5 .再如:ba 的序号是 2,aa 的序号是 1.
编程求出给定字符串 S(长度<=100) 的序号 P(保证<=30000)
注意:字符串只含小写字母。
Input
第一行为一整数N,表示有N组测试数据。每组测试数据为一字符串S。
Output
输出P
Sample Input
2 kensta jyms
Sample Output
274 5
KEY:我用的方法不是很好方法,看看就好……
Source:
#include < iostream >
#include < string >
#include < map >
#include < algorithm >
using namespace std;
void WORD( char s[])
... {
char tmp[110];
strcpy(tmp,s);
int i,k=1;
map<string,int> mp;
int len=strlen(s);
sort(s,s+len);
while(1)
...{
if(mp[string(s)]==0) mp[string(s)]=k++;
if(!next_permutation(s,s+len)) break;
}
cout<<mp[string(tmp)]<<endl;
}
int main()
... {
// freopen("fjnu_1408.in","r",stdin);
int N;
cin>>N;
getchar();
char s[110];
for(int i=1;i<=N;i++)
...{
gets(s);
WORD(s);
}
return 0;
}
![]()
![]()
![]()