栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

题解 P1246

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

题解 P1246

有点坑的一道组合题。


解题思路:

首先对于每一个字符串,长度比其小的一定比其小,这一块的总贡献是 ∑ i − 1 l e n − 1 C 26 i sum_{i-1}^{len-1}C_{26}^i ∑i−1len−1​C26i​。

然后是长度相等的,当确定前 i i i 位相等,当前位(也就是 i + 1 i+1 i+1 位,这里与程序实现有所不同)的字符为 j j j (转26进制,同样与程序实现不同)时,产生的方案贡献为 C 26 − j − 1 l e n − i − 1 C_{26-j-1}^{len-i-1} C26−j−1len−i−1​,这里需要枚举累加。


代码:
#include
#include
#include
using namespace std;
string a;
int ans;
int C(int m,int n){
	if(m==0)return 1;
	int ans=1;
	for(int i=n-m+1;i<=n;i++)
	ans*=i;
	for(int i=1;i<=m;i++)
	ans/=i;
	return ans;
}
int main(){
	cin>>a;
	for(int i=0;i 

反思:

本身不是一道非常难的组合题,但是还是做了好长时间,中途还 WA 了一发,这一块要多练练。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290883.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号