bestcoder #77 xiaoxin juju needs help
xiaoxin juju needs help
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相关推荐
- hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)
xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串. (题于文末) 知识点: n个元素,其中a1,a2,··· ...
- hdu5651 xiaoxin juju needs help(逆元)
xiaoxin juju needs help Accepts: 150 Submissions: 966 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- (回文串全排列个数) xiaoxin juju needs help
题目 As we all known, xiaoxin is a brilliant coder. He knew palindromic strings when he was only a six ...
- Java第十一天笔记01——多线程编程
目录 1.进程和线程的区别 2.多线程的实现 3.多线程状态及生命周期 4.线程中的主要方法 5.线程的优先级 6.线程的高级操作 7.线程同步 8.死锁 9.Lock对象 1.进程和线程的区别 每个 ...
- BestCoder Round #77 (div.2)解题报告
昨晚和Yveh合作的成果-- T1 传送门 题意:给一个正整数集合,求集合中各个子集里各元素的总异或 思路:对于一个数x对自己异或的结果,异或偶数次是x,奇数次为0,而且一个集合的非空子集数目为2n− ...
- BestCoder 2nd Anniversary
http://acm.hdu.edu.cn/search.php?field=problem&key=BestCoder+2nd+Anniversary&source=1&se ...
- 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 ...
- BestCoder Round #92 比赛记录
上午考完试后看到了晚上的BestCoder比赛,全机房都来参加 感觉压力好大啊QAQ,要被虐了. 7:00 比赛开始了,迅速点进了T1 大呼这好水啊!告诉了同桌怎么看中文题面 然后就开始码码码,4分1 ...
- BestCoder 1st Anniversary ($) 1002.Hidden String
Hidden String Accepts: 437 Submissions: 2174 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26 ...
最新文章
- DeepLearning——CNN
- 直线段检测算法(LSD:a Line Segment Detector)
- AC-Tek Sidewinder v7.2.2 输送机设计+IDEA StatiCa v9.1.31.50722 钢结构混凝土结构件设计...
- 程序员必备的在线编程辅导平台之TutorialsPoint
- 该如何在后期处理中,实现高亮描边的效果?
- java 传递bean_Java:如何将值从类/ bean传递给servlet
- keyshot10 pro for mac最新版
- 数据结构与算法 相关经典书籍推荐
- 一个java程序_从另一个java程序运行java程序
- mysql-5.5.38_MySQL-5.5.38通用二进制安装
- int 转string
- 如何在VS2015创建C语言项目
- python爬虫分析百度文库、道客巴巴、豆丁网获取图片链接
- Gitlab 隐藏注册功能
- (附源码)计算机毕业设计SSM家具商城系统
- xshell 6+xftp 6卸载时出现1628错误解决办法
- Tensorflow 笔记 Ⅱ——单变量线性回归
- oracle 磁盘组掉了,Oracle 11g RAC ASM磁盘全部丢失后的恢复(一)
- CSS3 3D transform
- 解决httpClient 调用返回“ ip:port fail to respond ” 问题