1 solutions
-
0
C++ :
#include<cstdio> #include<cstdlib> #include<algorithm> #include<iostream> using namespace std; int n; int b[150]={0}; char a[600]; long long sum=0; int print() { sum++; for(int i=1;i<=n;++i) { cout<<a[i]; } printf("\n"); } int search(int i) { for(int j='a';j<='z';++j) { if(b[j]!=0) { a[i]=j; b[j]--; if(i==n) { print(); } else { search(i+1); } b[j]++; } } } int main() { cin>>n; char c; for(int i=1;i<=n;++i) { cin>>c; b[c]++; } search(1); cout<<sum; return 0; }
Pascal :
var a:array['a'..'z'] of longint; b:array[0..501] of char; i,j,n,tot:longint; s:char; procedure search(k:longint); var i:longint; j:char; begin if (k>n) then begin inc(tot); for i:=1 to n do write(b[i]); writeln; exit; end; for j:='a' to 'z' do if a[j]>0 then begin b[k]:=j; dec(a[j]); search(k+1); inc(a[j]); end; end; begin readln(n); for i:=1 to n do begin read(s); inc(a[s]); end; search(1); writeln(tot); end.
Java :
/* public class Main5544 { public static void main(String[] args) { int[] a = { 1,1,2,2}; System.out.println(perm(a, 0)); } public static int perm(int[] a, int begin) { if (begin == a.length) { for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); return 1; } int count = 0; for (int i = begin; i < a.length; i++) { if(isSwap(a,begin,i)){ swap(a, begin, i); count += perm(a, begin + 1); swap(a, begin, i); } } return count; } public static void swap(int[] a, int begin, int end) { int temp = a[begin]; a[begin] = a[end]; a[end] = temp; } public static boolean isSwap(int[] a,int begin,int end){ for(int i=end;i>begin;i--){ if(a[end]==a[i-1]){ return false; } } return true; } } */ import java.util.Iterator; import java.util.Scanner; import java.util.TreeSet; public class Main { static TreeSet<String> list; public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextInt()){ int n = in.nextInt(); String str = in.next(); char[] s = str.toCharArray(); list = new TreeSet<String>(); int count = perm(s,0); Iterator<String> it = list.iterator(); while(it.hasNext()) System.out.println(it.next()); System.out.println(count); } } public static int perm(char[] s, int i) { if (i == s.length) { String str = new String(s); list.add(str); return 1; } int count = 0; for (int j = i; j < s.length; j++) { if (isSwap(s, i, j)) { swap(s, j, i); count+=perm(s, i + 1); swap(s, j, i); } } return count; } public static void swap(char[] s, int i, int j) { char t = s[i]; s[i] = s[j]; s[j] = t; } public static boolean isSwap(char[] a, int begin, int end) { /*for (int i = end; i > begin; i--) { if (a[end] == a[i - 1]) { return false; } }*/ for(int i=begin;i<end;i++) if(a[end]==a[i]) return false; return true; } }
- 1
Information
- ID
- 662
- Time
- 2000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By