题目链接:K-卡特兰数_2023河南萌新联赛第(二)场:河南工业大学 (nowcoder.com)

一开始想到和阶乘末尾0的个数一样的题目,但有点不同,根据公式,一开始的重点完全在公式上了,因为前几项的数太大,猜测公式可以化简,但是当时没学组合数学,又不知道怎么化简嘴都一项,就一直卡着。

后面题解发现和阶乘0的个数确实一样,找出2,5因子数目的最小值,可以递推找,因为(4 * n  - 2) / (n + 1) 看作是常数的乘积,有共同的前缀, 把相应的因子减掉就是从i - 1到 i 多的因子,最后再求个前缀因子取最小后就是答案

#include<bits/stdc++.h>

using namespace std;
using ull = unsigned long long;
using ll = long long;
using PII = pair<int,int>;
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define endl "\n"
#define pb push_back
const int N=5e6+10;
const int INF=0x3f3f3f3f;
int cnt2[N], cnt5[N]; int main()
{
int n;
cin >> n;
auto f = [&](int x, int t)
{
int res = 0;
while(x % t == 0) res ++, x /= t;
return res;
};
for(int i = 1; i <= n; i ++)
{
cnt2[i] = cnt2[i - 1], cnt5[i] = cnt5[i - 1]; cnt2[i] += f(4 * i - 2, 2);
cnt5[i] += f(4 * i - 2, 5); cnt2[i] -= f(i + 1, 2);
cnt5[i] -= f(i + 1, 5);
}
for(int i = 1; i <= n; i ++) cnt2[i] += cnt2[i - 1], cnt5[i] += cnt5[i - 1];
cout << min(cnt2[n], cnt5[n]);
return 0;
}

前n项结尾0的个数的更多相关文章

  1. 结尾0的个数(问题来源PythonTip)

    给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数.(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大). 例如: L=[2,8,3,50], 则输出:2 利用2 和 5 思路: 算各 ...

  2. 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论

    链接:https://www.nowcoder.com/acm/contest/135/C来源:牛客网 题目描述 其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使其 ...

  3. 前n项余数个数和

    一:O(n) 计算贡献:前n项中,能被i(1~n)整除的数的个数为(n/i)个,,也就是 i 给前n项中(n/i)个数做了余数 #include<iostream> using names ...

  4. HDU_2011——求多项式的前n项和

    Problem Description 多项式的描述如下:1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...现在请你求出该多项式的前n项的和.   Input 输入数据由2行组 ...

  5. Fibonacci数列前n项值的输出(运用递归算法)

    1.斐波那契数列: 又称黄金分割数列,指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 在数学上,斐波纳契数列以如下被以递归的方法 ...

  6. 打印Fibonacci数列方法汇总(前20项,每行5个)

    NO.1 迭代法 标签:通俗.易懂 思路:先打印第一项.再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余). #inc ...

  7. Java例题_20 前20项之和!

    1 /*20 [程序 20 求前 20 项之和] 2 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和. 3 程序分析:请抓住分子与分母的变 ...

  8. POJ 2478 Farey Sequence(欧拉函数前n项和)

    A - Farey Sequence Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  9. 39. 求分数序列前N项和

    求分数序列前N项和 #include <stdio.h> int main() { int i, n; double numerator, denominator, item, sum, ...

  10. 20. 求阶乘序列前N项和

    求阶乘序列前N项和 #include <stdio.h> double fact(int n); int main() { int i, n; double item, sum; whil ...

随机推荐

  1. MySQL索引最左原则:从原理到实战的深度解析

    MySQL索引最左原则:从原理到实战的深度解析 一.什么是索引最左原则? 索引最左原则是MySQL复合索引使用的核心规则,简单来说: "当使用复合索引(多列索引)时,查询条件必须从索引的最左 ...

  2. ITSM运维管理整理总结

    ITSM 和我们平常所说的软件管理最大的不同? 目标不是管理技术,主要任务是管理用户和客户的IT需求 2.人员.技术.流程[重要] 3.几大模块 模块名称 干什么 备注 服务台 1.对接客户的前方,负 ...

  3. jmespath 使用及案例

    什么是jmespath jmespath 是python里面的一个库 主要在httprunner框架里使用 2.使用语法 列表: with_jmespath(jmes_path,var_name) m ...

  4. goland JetBrains编辑器:代码爆红找不到引用,但项目可运行

    前言 goland JetBrains 编辑器:代码爆红找不到引用,但项目可运行 解决 goland 缓存已满,需要清除缓存

  5. MongoDB 复制集机制及原理

    复制集的作用 MongoDB 复制集的主要意义在于实现服务高可用. 它的现实依赖于两个方面的功能: 数据写入时将数据迅速复制到另一个独立节点上 在接受写入的节点发生故障时自动选举出一个新的代替节点 在 ...

  6. CompletableFuture你真的懂了么,我劝你在项目中慎用

    1. 前言 在实际做项目中,我们经常使用多线程.异步的来帮我们做一些事情. 比如用户抽取奖品,异步的给他发一个push. 又比如一段前后不相关的业务逻辑,原本是顺序执行,耗时=(A + B + C), ...

  7. 一个属性同时使用Autowired和Resource注解会发生什么?

    首发于公众号:BiggerBoy 右侧图片wx扫码关注有惊喜 欢迎关注,查看更多技术文章 如题,如果在同一个属性上使用@Autowired注解注入bean1,然后使用@Resource注解注入bean ...

  8. 【Java】枚举类和注解

    一.枚举类的使用 1. 枚举类的说明: 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 当需要定义一组常量时,强烈建议使用枚举类 枚举类的实现: JDK 5.0以前需要自定义 JDK 5 ...

  9. 根据二叉树的前序和中序构建树,并按层次输出(C++)vector存树

    L2-006 树的遍历 #include <bits/stdc++.h> #define int long long using namespace std; #define endl ' ...

  10. Windows IntelliJ IDEA 快捷键终极大全

    自动代码 常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boilerplate样板代码 . 例如要输入for(User user : users)只需输 ...