Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

QBHV - Hoán vị chữ cái

Cho một xâu S chỉ gồm các chữ cái in hoa, 1 <= độ dài <= 9.

Yêu cầu:

1: Có bao nhiêu cách hoán vị các chữ cái của xâu S

2: Liệt kê các hoán vị đó theo thứ tự từ điển

Input

Gồm 1 dòng duy nhất chứa xâu S

Output

Dòng 1: Ghi số lượng hoán vị tìm được (K)

K dòng tiếp theo, mỗi dòng ghi một xâu hoán vị của xâu S theo đúng thứ tự từ điển

Example

Input:
ABAB
Output:
6
AABB
ABAB
ABBA
BAAB
BABA
BBAA


Được gửi lên bởi:special_one
Ngày:2008-06-12
Thời gian chạy:0.113s
Giới hạn mã nguồn:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Ngôn ngữ cho phép:Tất cả ngoại trừ: ERL GOSU JS-RHINO NODEJS PERL6 PYPY RUST SED VB.NET
Nguồn bài:Lê Minh Hoàng

hide comments
2017-08-30 16:10:32
c++ TLE thì chuyển cin cout thành scanf printf là ok
làm mất mấy đấm
2017-08-24 12:30:18
Xem thuật toán và code ở
https://vietcodes.github.io/code/59/
2017-08-17 06:12:53 Con Bò Huyền Thoại
https://kienthuc24h.com/bai-giai-qbhv-spoj-2783-hoan-vi-chu-cai/
2016-12-07 09:25:14
làm mãi vẫn không AC

Last edit: 2016-12-07 09:25:47
2016-09-28 16:59:27
AC :)
2016-09-28 15:39:40
Code AC (100%):
http://shink.in/j0FTD
2016-08-13 02:41:01
C++ dùng next_permutation khỏe

Last edit: 2016-08-13 02:41:55
2016-07-03 05:39:41
#include <bits/stdc++.h>
using namespace std;
const int maxsl = 362880;
char s[10];
char x[9];
int n, m;
std::map <char,int> D;
char a[9];
bool Free[9];
void QSort(int l , int r)
{
int i, j;
char key;
i = l; j = r; key = s[(l+r)/2];
while ( i <= j)
{
while ( s[i] < key) i++;
while ( s[j] > key) j--;
if ( i <= j)
{
swap(s[i], s[j]);
i++; j--;
}
}
if ( i < r) QSort(i,r);
if ( l < j) QSort(l,j);
}
int giaithua(int i)
{
if ( i == 0) return 1;
int tmp = 1;
for ( int j = 2; j <= i ; j++) tmp = tmp*j;
return (tmp);
}
void thu(int i)
{
int j;
for ( j = 0 ; j <= n - 1; j++)
if ( Free[j])
{
x[i] = s[j]; Free[j] = false;
if ( (i == n - 1 ) && (strcmp(x,a) == 1))
{
printf("%s\n",x);
//cout << x << endl;
//cout << x;
strcpy(a,x);
}
else thu( i + 1);
Free[j] = true;
}
}
int main()
{
scanf("%s",&s);
n = strlen(s);
QSort(0,n-1);
memset(Free , true, sizeof(Free));
for ( char ch = 'A'; ch <= 'Z'; ch++) D[ch] = 0;
for (int i = 0 ; i <= n - 1; i++) D[s[i]] ++;
int tmp = 1;
for ( char ch = 'A'; ch <= 'Z'; ch++) tmp = tmp*giaithua(D[ch]);
cout << giaithua(n)/tmp << endl;
//a = ""; m = 0;
thu(0);
return 0;
}
Sai o dau AE oi
2016-05-04 14:29:15 Phạm Huỳnh Nhật
t111 Tài liệu chuyên tin
2016-01-21 13:45:39 Lê Thanh Phú
thuat toan giong nhau: dem roi quay lui in.
c++ thi TLE
Pas thi AC
KDL string trong c++ cham hon chang?
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.