1 solutions

  • 0
    @ 2024-12-11 0:09:07

    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