首页 > 其他分享 >前n项结尾0的个数

前n项结尾0的个数

时间:2023-07-20 20:13:28浏览次数:24  
标签:结尾 int res 个数 long using define

题目链接: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;
}

 

标签:结尾,int,res,个数,long,using,define
From: https://www.cnblogs.com/ZouYua/p/17569532.html

相关文章

  • spring boot 如何配置多个数据源,mysql和oracle
    在SpringBoot中配置多个数据源,例如MySQL和Oracle,可以通过以下步骤实现:添加依赖在pom.xml文件中添加MySQL和Oracle的依赖:<!--MySQL--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!......
  • 2023-07-18:给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空), 使得剩余元素的 和
    2023-07-18:给你一个正整数数组nums,请你移除最短子数组(可以为空),使得剩余元素的和能被p整除。不允许将整个数组都移除。请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回-1。子数组定义为原数组中连续的一组元素。输入:nums=[3,1,4,2],p=6。输出:1。答......
  • 2023-07-18:给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空), 使得剩余元素的 和
    2023-07-18:给你一个正整数数组nums,请你移除最短子数组(可以为空),使得剩余元素的和能被p整除。不允许将整个数组都移除。请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回-1。子数组定义为原数组中连续的一组元素。输入:nums=[3,1,4,2],p=6。输......
  • python找出某个数据位于列表第几个
    Python找出某个数据位于列表第几个的流程说明为了帮助小白开发者找出某个数据位于列表的第几个位置,我们可以通过以下流程进行实现:输入一个待查找的数据和一个包含该数据的列表使用循环遍历列表,逐个比较列表中的元素与待查找数据是否相等如果找到了相等的元素,则返回该元素在列......
  • python用函数求两个数和并返回结果
    Python用函数求两个数和并返回结果作为一名经验丰富的开发者,我很荣幸能够教会你如何使用函数求两个数的和并返回结果。在本篇文章中,我将为你提供一个简单的步骤,并附上代码示例和注释,以帮助你更好地理解。步骤下面是求两个数和并返回结果的整个流程。你可以根据这个表格的步骤来......
  • js最简代码获取多个数组的交集
    直接上代码!//定义三个数组leta=[1,3,5,7,9];letb=[1,2,4,5,7];letc=[1,3,5,8,7];constgetIntersection=(a,...array)=>{//...array表示可以传入多个数组 returna.filter(item=>array.every(elem=>elem.includes(item)))}letnewArray=getIntersection(a......
  • C#DataGridView两个数据表同步滚动
    一、同步滚动SumTable为表1,CycleTable为表2两个表都添加Scroll滚动事件privatevoidSumTable_Scroll(objectsender,ScrollEventArgse)//滚动同步{CycleTable.FirstDisplayedScrollingRowIndex=SumTable.FirstDisplayedScrollingRowIndex;......
  • 判断一个数是不是快乐数
    publicstaticvoidmain(String[]args){/***示例:**输入:19*输出:true*解释:*1^2+9^2=82*8^2+2^2=68*6^2+8^2=100*1^2+0^2+0^2=1*......
  • vue-day16---模拟一个数据监测
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><title>模拟一个数据监测你</title></head><body><scripttype="text/javascript">letdata={......
  • python怎么每三个数字一起输出
    项目方案:Python每三个数字一起输出1.项目背景在某些情况下,我们需要对一组数字进行分组输出,每组输出包含三个数字。例如,对于一个包含100个数字的列表,我们希望每三个数字为一组进行输出。这样做有助于简化数据的分析和处理。2.目标编写一个Python程序,接受一个包含数字的列表作......