xiaoxin juju needs help

 Accepts: 134
 Submissions: 309
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)

问题描述
xiaoxin巨从小就喜欢字符串,六年级的时候他就知道了什么是回文串。这时,xiaoxin巨说到:如果一个字符串 SS 是回文串,那么该字符串从前往后看和从后往前看是一样一样的。六年级的暑假,xiaoxin很快就做完了暑假作业,然后到腾讯做起了实习生。这日,leader给了xiaoxin一个字符串,请xiaoxin帮忙写一个函数来生成所有可能的回文串,可以任意改变字符串的顺序但是不可以扔掉某个字符。并且leader告诉xiaoxin,每生成一个不一样的回文串就可以得到一颗西瓜糖。请你帮忙计算xiaoxin的leader最多需要买多少颗西瓜糖呢?
输入描述
多组测试数据。第一行包含一个整数 T(T\leq 20)T(T≤20) 表示组数。每组测试数据给出一个只包含小写字母的字符串 S(1\leq length(S)\leq 1,000)S(1≤length(S)≤1,000)
输出描述
对于每组测试数据,输出一个数, 表示leader需要买的西瓜糖的个数,结果对 1,000,000,0071,000,000,007 取模。
输入样例
3
aa
aabb
a
输出样例
1
2
1

思路:如果说有大于1个的奇数字符存在,那么就不能构成回文。能构成的情况下,判断一半边就行了,另一个半边相同就行。然后就是组合数形式

#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#define ll __int64
#define MOD 1000000007
using namespace std;char s[10009];
int num[1000];
//map<char,int>mp;ll kuai(ll m,ll n)
{ll b=1LL;while(n){if(n&1)b=b*m%MOD;n>>=1;m=m*m%MOD;}return b;
}
int main()
{int n;scanf("%d",&n);while(n--){scanf("%s",s);int len=strlen(s);if(len==1){puts("1");continue;}memset(num,0,sizeof num);for(int i=0;i<len;i++){num[s[i]]++;}int flag=0;for(int i=0;i<256;i++){if(num[i]%2) flag++;}if(flag>1){puts("0");continue;}int sum=0;for(int i=0;i<256;i++){num[i]/=2;sum+=num[i];}ll ans=1;for(int i=0;i<256;i++){if(num[i] && sum>=num[i]){ll tmp=1LL;ll tmp2=1LL;int t=min(sum-num[i],num[i]);int fff=sum;for(int j=1;j<=t;j++){tmp=tmp*fff%MOD;fff--;}for(int j=1;j<=t;j++)tmp2=tmp2*j%MOD;tmp=tmp*kuai(tmp2,MOD-2)%MOD;//逆元把除法转乘法sum-=num[i];ans=(ans*tmp)%MOD;}}printf("%I64d\n",ans);}return 0;
}

bestcoder #77 xiaoxin juju needs help相关推荐

  1. hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)

    xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串.                      (题于文末) 知识点: n个元素,其中a1,a2,··· ...

  2. hdu5651 xiaoxin juju needs help(逆元)

    xiaoxin juju needs help Accepts: 150 Submissions: 966 Time Limit: 2000/1000 MS (Java/Others) Memory ...

  3. (回文串全排列个数) xiaoxin juju needs help

    题目 As we all known, xiaoxin is a brilliant coder. He knew palindromic strings when he was only a six ...

  4. Java第十一天笔记01——多线程编程

    目录 1.进程和线程的区别 2.多线程的实现 3.多线程状态及生命周期 4.线程中的主要方法 5.线程的优先级 6.线程的高级操作 7.线程同步 8.死锁 9.Lock对象 1.进程和线程的区别 每个 ...

  5. BestCoder Round #77 (div.2)解题报告

    昨晚和Yveh合作的成果-- T1 传送门 题意:给一个正整数集合,求集合中各个子集里各元素的总异或 思路:对于一个数x对自己异或的结果,异或偶数次是x,奇数次为0,而且一个集合的非空子集数目为2n− ...

  6. BestCoder 2nd Anniversary

    http://acm.hdu.edu.cn/search.php?field=problem&key=BestCoder+2nd+Anniversary&source=1&se ...

  7. BestCoder Round #29 1003 (hdu 5172) GTY's gay friends [线段树 判不同 预处理 好题]

    传送门 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  8. BestCoder Round #92 比赛记录

    上午考完试后看到了晚上的BestCoder比赛,全机房都来参加 感觉压力好大啊QAQ,要被虐了. 7:00 比赛开始了,迅速点进了T1 大呼这好水啊!告诉了同桌怎么看中文题面 然后就开始码码码,4分1 ...

  9. BestCoder 1st Anniversary ($) 1002.Hidden String

    Hidden String Accepts: 437 Submissions: 2174 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26 ...

最新文章

  1. DeepLearning——CNN
  2. 直线段检测算法(LSD:a Line Segment Detector)
  3. AC-Tek Sidewinder v7.2.2 输送机设计+IDEA StatiCa v9.1.31.50722 钢结构混凝土结构件设计...
  4. 程序员必备的在线编程辅导平台之TutorialsPoint
  5. 该如何在后期处理中,实现高亮描边的效果?
  6. java 传递bean_Java:如何将值从类/ bean传递给servlet
  7. keyshot10 pro for mac最新版
  8. 数据结构与算法 相关经典书籍推荐
  9. 一个java程序_从另一个java程序运行java程序
  10. mysql-5.5.38_MySQL-5.5.38通用二进制安装
  11. int 转string
  12. 如何在VS2015创建C语言项目
  13. python爬虫分析百度文库、道客巴巴、豆丁网获取图片链接
  14. Gitlab 隐藏注册功能
  15. (附源码)计算机毕业设计SSM家具商城系统
  16. xshell 6+xftp 6卸载时出现1628错误解决办法
  17. Tensorflow 笔记 Ⅱ——单变量线性回归
  18. oracle 磁盘组掉了,Oracle 11g RAC ASM磁盘全部丢失后的恢复(一)
  19. CSS3 3D transform
  20. 解决httpClient 调用返回“ ip:port fail to respond ” 问题

热门文章

  1. 加密数字货币生态建设 ——Robot Global项目分析
  2. 1.Postman下载及安装
  3. [UOJ #48]【UR #3】核聚变反应强度
  4. C语法关于数组的运用
  5. 上位机开发——Modbus联合运动控制卡实时通信
  6. vue项目导出自定义多级表头表格
  7. vue项目中使用g2统计图
  8. java 图片存进mysql_Java操作mysql存储图片
  9. LTE-TDD measurement gaps位置计算--Python代码实现
  10. osg+pdal大数据点云的LOD可视化