给出一个字符串求是palindrome和anagram的比率是多少。

知识点:

1 DBL_MAX 64位double的最长数大概是1.7E308,非常大非常大,比long long大上不知多少倍。故此大概能容纳150!的数值。不能容纳200!的数值

2 偶数的时候。不能有字母反复为基数次,否则不能组成palindrome

3 基数的时候,仅仅能有且仅仅有有一个字母反复为基数次,用于放在中间的,否则也不能组成palindrome

4 计算带反复数的全排列公式:P(N) / P(M1)/P(M2)...P(Mk) 当中M1...Mk为数值出现的反复数

250分的题目,只是这250不easy拿呢。一点水分都没有的。2,3知识点不是那么好总结,1,4知识点缺一不可。

#include <string>
#include <malloc.h>
#include <algorithm>
using namespace std; class PalindromePermutations
{
double *tbl;
public:
PalindromePermutations() : tbl((double*)malloc(sizeof(double)*51))
{
tbl[0] = 1.0;
for (int i = 1; i < 51; i++)
tbl[i] = i * tbl[i-1];
}
~PalindromePermutations()
{
free(tbl);
} double palindromeProbability(string w)
{
int n = (int)w.size(); double numerator = tbl[n/2], denominator = tbl[n];
int odd = 0;
for (char ch = 'a'; ch <= 'z'; ch++)
{
int t = count(w.begin(), w.end(), ch);
if (t % 2 == 1) odd++; numerator /= tbl[t/2];
denominator /= tbl[t];
}
//1.odd大于1对全部情况都不存在palindrome,2.n为偶数,仅仅能不存在odd
if ((odd > 1) || (odd != n % 2))
return 0.0; return numerator / denominator;
}
};

Topcoder SRM625 题解的更多相关文章

  1. TopCoder SRMS 1 字符串处理问题 Java题解

    Problem Statement   Let's say you have a binary string such as the following: 011100011 One way to e ...

  2. Topcoder SRM 607 div1题解

    好久没来写了,继续继续... Easy(250pts): //前方请注意,样例中带有zyz,高能预警... 题目大意:给你一个字符串,中间有一些是未知字符,请你求出这个字符串的回文子串个数的期望值.数 ...

  3. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  4. TopCoder SRM 667 Div.2题解

    概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...

  5. TopCoder SRM 625 Incrementing Sequence 题解

    本题就是给出一个数k和一个数组,包含N个元素,通过每次添加�数组中的一个数的操作,最后须要得到1 - N的一个序列,不用排序. 能够从暴力法入手,然后优化. 这里利用hash表进行优化,终于得到时间效 ...

  6. TopCoder SRM624 BuildingHeightEasy 题解

    本题题意就是求有一组建筑物,问把这些建筑物的M个都统一到同一高度.须要的最小改动高度是多少? 题意隐含的意思就是由于是建筑物,所以不能降低,仅仅能添加了. 本题能够使用暴力搜索,由于数据量少. 可是事 ...

  7. Topcoder SRM 608 div1 题解

    Easy(300pts): 题目大意:有n个盒子,一共有S个苹果,每个盒子有多少个苹果不知道,但是知道每个盒子的苹果下限和上限.现在要至少选择X个苹果,问如果要保证无论如何都能获得至少X个苹果,至少需 ...

  8. Topcoder SRM 606 div1题解

    打卡! Easy(250pts): 题目大意:一个人心中想了一个数,另一个人进行了n次猜测,每一次第一个人都会告诉他实际的数和猜测的数的差的绝对值是多少,现在告诉你所有的猜测和所有的差,要求你判断心中 ...

  9. Topcoder SRM 605 div1 题解

    日常打卡- Easy(250pts): 题目大意:你有n种汉堡包(统统吃掉-),每一种汉堡包有一个type值和一个taste值,你现在要吃掉若干个汉堡包,使得它们taste的总和*(不同的type值的 ...

随机推荐

  1. jQuery实现当按下回车键时绑定点击事件

    jQuery实现当按下回车键时绑定点击事件 <script> $(function(){ $(document).keydown(function(event){ if(event.key ...

  2. iOS学习笔记29-系统服务(二)通讯录

    一.通讯录 iOS中的通讯录是存储在数据库中的,由于iOS的权限设计,开发人员是不允许直接访问通讯录数据库的,实现通讯录操作需要使用到AddressBook.framework框架. AddressB ...

  3. 【Luogu】P3358最长k可重区间集问题(费用流)

    题目链接 这题费用瘤,数据貌似还是错的. 把线段抽象抽象拆成两个点,入点表示左端,出点表示右端,连上容量为1费用-长度的边. 不相交线段随便连下,源点向拆出的原点S'连费用为0容量k,然后跑费用流. ...

  4. 算法复习——数位dp

    开头由于不知道讲啥依然搬讲义 对于引入的这个问题,讲义里已经很清楚了,我更喜欢用那个建树的理解···· 相当于先预处理f,然后从起点开始在树上走··记录目前已经找到了多少个满足题意的数k,如果枚举到第 ...

  5. 怎样抓获或忽略像control-C这样的键盘中断?

    基本步骤是调用signal():#include <signal.h>singal(SIGINT, SIG_IGN); 就可以忽略中断信号, 或者:extern void func(int ...

  6. 【bzoj4031】[HEOI2015]小Z的房间 && 【bzoj4894】天赋 (矩阵树定理)

    来两道矩阵树模板: T1:[bzoj4031][HEOI2015]小Z的房间 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形 ...

  7. 【NOIP2016练习】T1 string (计数)

    题意: 思路: ; ..]of int64; n,k,i:longint; ans,x,y:int64; s,t:ansistring; function c(x,y:longint):int64; ...

  8. 【CF707B】Bakery(想法题)

    题意: 有N个城市,M条无向边,其中有K个城市是仓库 现在要在非仓库的城市中选择一家开面包店,使得其最少与一个仓库联通,且到所有仓库距离的最小值最小 (1 ≤ n, m ≤ 10^5, 0 ≤ k ≤ ...

  9. 标准C程序设计七---77

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  10. 第0章Linux环境到内核基础知识

    #include<stdio.h> int main(void) { printf("hello world\n"); return 0; } gcc -g -wall ...