首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【BestCoder Round #77 (div.2)】xiaoxin juju needs help(排列与组合)

【BestCoder Round #77 (div.2)】xiaoxin juju needs help(排列与组合)

作者头像
FishWang
发布2025-08-27 08:47:29
发布2025-08-27 08:47:29
11200
代码可运行
举报
运行总次数:0
代码可运行

xiaoxin juju needs help

 Accepts: 8

Submissions: 11

 Time Limit: 2000/1000 MS (Java/Others)

 Memory Limit: 65536/65536 K (Java/Others)

问题描述

代码语言:javascript
代码运行次数:0
运行
复制
xiaoxin巨从小就喜欢字符串,六年级的时候他就知道了什么是回文串。这时,xiaoxin巨说到:如果一个字符串 SS 是回文串,那么该字符串从前往后看和从后往前看是一样一样的。

六年级的暑假,xiaoxin很快就做完了暑假作业,然后到腾讯做起了实习生。这日,leader给了xiaoxin一个字符串,请xiaoxin帮忙写一个函数来生成所有可能的回文串,可以任意改变字符串的顺序但是不可以扔掉某个字符。并且leader告诉xiaoxin,每生成一个不一样的回文串就可以得到一颗西瓜糖。

请你帮忙计算xiaoxin的leader最多需要买多少颗西瓜糖呢?

输入描述

代码语言:javascript
代码运行次数:0
运行
复制
多组测试数据。第一行包含一个整数 T(T\leq 20)T(T≤20) 表示组数。每组测试数据给出一个只包含小写字母的字符串 S(1\leq length(S)\leq 1,000)S(1≤length(S)≤1,000)

输出描述

代码语言:javascript
代码运行次数:0
运行
复制
对于每组测试数据,输出一个数, 表示leader需要买的西瓜糖的个数,结果对 1,000,000,0071,000,000,007 取模。

输入样例

代码语言:javascript
代码运行次数:0
运行
复制
3
aa
aabb
a

输出样例

代码语言:javascript
代码运行次数:0
运行
复制
1
2
1

猛地一看以为多难,其实还是排列与组合。但是现在还有一个问题,为什么有的时候不能取余呢?(本来宏定义了MOD,结果总是报错,后来只好改成变量了,求大神们说明一下)

代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int c[511][511];
long long MOD = 1e9+7;
void C()
{
	for (int i=0;i<=500;i++)
		c[i][0]=1;
	for (int i=1;i<=500;i++)
	{
		for (int j=1;j<=i;j++)
			c[i][j]=(c[i-1][j-1]+c[i-1][j]) % MOD;
	}
}
int main()
{
	int u;
	char a[1111];
	int num[27];
	int l;
	C();
	scanf ("%d",&u);
	while (u--)
	{
		scanf ("%s",a);
		memset(num,0,sizeof (num));
		l = strlen (a);
		for (int i = 0 ; i < l ; i++)
			num[a[i]-'a'+1]++;
		int odd = 0;
		for (int i = 1 ; i <= 26 ; i++)
		{
			if (num[i] & 1)
			{
				odd++;
				num[i] = 0;
			}
			else
				num[i] /= 2;
		}
		if (odd > 1 || (odd == 1 && (l & 1) == 0))		//特判一下 
		{
			printf ("0\n");
			continue;
		}
		l /= 2;
		long long ans = 1;
		for (int i = 1 ; i <= 26 ; i++)
		{
			ans = (ans * c[l][num[i]]) % MOD;
			l -= num[i];
		}
		printf ("%I64d\n",ans);
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • xiaoxin juju needs help
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档