24h購物| | PChome| 登入
2009-08-12 22:18:36| 人氣1,195| 回應0 | 上一篇 | 下一篇

2004 NPSC A. 迴文數目

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : 重複排列

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

若有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;
}

台長: 來源不明
人氣(1,195) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: NPSC |
此分類下一篇:2005 NPSC F. P方陣
此分類上一篇:2008 NPSC C. 咒語

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文