2009-08-12 22:18:36來源不明

2004 NPSC A. 迴文數目

作法 : 重複排列

首先每個字母的出現次數先加總

若有2個次數以上的出現次數為奇數  答案則為0

不是的話,拿一半做重複排列...

/**********************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
 int n;
 long long int math[21],a;
 math[0]=1;
  for(a=1;a<21;a++)
     math[a]=math[a-1]*a;
  
 while(scanf("%d",&n)==1)
    while(n--)
     {
       char s[50];
       scanf("%s",s);
       int m=strlen(s),num[26]={0};
       for(a=0;a<strlen(s);a++)
          num[s[a]-'a']++;
       int time=0,sum=0;
       for(a=0;a<26;a++)
          {
           if(num[a]%2==1) time++;
           sum=sum+num[a];
          }
       if(time>=2) printf("0\n");
       else
           {
             sum=(sum-time)/2;
             long long int ans=math[sum];
             for(a=0;a<26;a++)
                ans=ans/math[num[a]/2];
             printf("%lld\n",ans);
           }
     }
 return 0;
}

上一篇:2008 NPSC C. 咒語

下一篇:2005 NPSC F. P方陣