idol!! 2023牛客暑期多校训练营6 C

news/2024/12/23 0:20:22/

登录—专业IT笔试面试备考平台_牛客网

题目大意:·定义n!!等于与n的奇偶性相同的所有小于等于n的数的阶乘之和,问n!!的末尾有多少0

1<=n<=1e18

思路:因为末尾0的来源是2*5,而2的个数明显比5的个数多得多,所以末尾0的个数就等于有多少个5相乘。

首先我们看所有奇数,在n的范围内有cnt1=(n+1)/2个奇数,然后我们观察发现,除了前两个奇数1,3之外,后面每5个数他们的因数中间包含的5的个数是相同的,比如5~13每个奇数都有一个因数5,15~23有两个,而25~33有4个35~43有5个,前两组和后两组5的个数都相差1,而两者之间相差2,这是因为25不仅有因数5,还有因数25额外提供了一个5,那么如果我们先不管额外提供的这个5,那么每一组5的个数都是等差数列,一共有cnt2=(cnt-1)/5组,每组大小s为5,那么总合也就是(1+cnt2)*s*cnt2/2。

然后所有数对应减去他们本次提供的贡献后,可以发现前两组数剩余5的个数都变成了0,下一组变成了25~73的个数为1,75~123的个数为2,125~173的个数为4,也就是新的等差数列的每组大小变成了a*5,其余都不变,所以我们可以从5开始枚举a,直到所有数的贡献都被计算完毕。

对于偶数,唯一的不同就是一开始前四个数的贡献为0,每次求等差数列后,前四组的贡献清零,分两次求奇偶再加起来就好

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
typedef __int128 ll;//答案超过了long long 的数据范围
ll read()
{//直接在函数里面实现读字符串操作更简洁ll res = 0;//初始结果赋值0char scan[1005];scanf("%s", scan);for (int i = 0; i < strlen(scan); i++)res *= 10, res += scan[i] - '0';//实现进位return res;//返回__int128类型
}
void print(ll num)
{//递归调用,实现从高位向低位输出if (num > 9)print(num / 10);putchar(num % 10 + '0');
}
int main()
{ll n = read();ll a = 1;ll ans = 0;ll cnt1 = (n + 1) / 2;//奇数的个数while (cnt1>0){a *= 5;//每组大小ll cnt2 = (cnt1 - 2) / a;//组数ll sum1 = (1 + cnt2) * a * cnt2 / 2;//求等差数列和ll mod = (cnt1 - 2) % a;//不在组里的余数sum1 += (cnt2 + 1) * mod;//单独算一下余数ans += sum1;cnt1 -= 2 * a;//维护剩余有攻陷的数的个数}if (ans < 0){//特判cnt=1print(0);return 0;}a = 1;cnt1 = n / 2;//偶数的的个数while (cnt1>0){a *= 5;ll cnt2 = (cnt1 - 4) / a;//前四组贡献为0ll sum1 = (1 + cnt2) * a * cnt2 / 2;ll mod = (cnt1 - 4) % a;sum1 += (cnt2 + 1) * mod;ans += sum1;cnt1 -= 4 * a;}if (ans < 0){//特判cnt1=1,2,3print(0);return 0;}print(ans);return 0;
}


http://www.ppmy.cn/news/1011731.html

相关文章

vue-router相关(持续更新中)

文章目录 router-viewrouter-view的嵌套router.addRoute复杂嵌套实例 总结 router-view <router-view></router-view>router-view 是Vue Router中的一个组件&#xff0c;用于渲染匹配到的路由组件。它是用来显示当前路由对应的组件内容的占位符。 即当前路由组件会…

final,static,this,super 关键字总结

文章目录 final 关键字static 关键字修饰成员变量和成员方法(常用)静态代码块静态内部类静态导包 this 关键字super 关键字补充内容静态方法与非静态方法static{}静态代码块与{}非静态代码块(构造代码块) final 关键字 final关键字&#xff0c;意思是最终的、不可修改的&#…

【嵌入式环境下linux内核及驱动学习笔记-(18)LCD驱动框架1-LCD控制原理】

目录 1、LCD显示系统介绍1.1 LCD显示基本原理1.1.1 颜色的显示原理&#xff1a;1.1.2 图像的构成 1.2 LCD接口介绍1.2.1 驱动接口 - MCU接口1.2.2 驱动接口 - RGB接口1.2.3 驱动接口 - LVDS接口1.2.4 驱动接口 - MIPI接口1.2.5 RGB / MIPI / LVDS三种接口方式的区别&#xff1a…

Vue2与Vue3—引入DataV

一、文档参考 vue2使用DataV文档 vue3使用DataV文档 二、开始 1、npm安装DateV 支持npm、pnpm、yarn V2&#xff1a; npm install jiaminghi/data-viewV3&#xff1a; npm install kjgl77/datav-vue32、全局引入DataV // main.ts中全局引入 v2: import dataV from jiaminghi/…

SciencePub学术 | 算法类重点SCIEEI征稿中

SciencePub学术 (www.sciencepub.cn) 刊源推荐: 算法类重点SCIE&EI征稿中&#xff01;2区闭源好刊&#xff0c;对国人非常友好。信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 算法类重点SCIE&EI 【期刊简介】IF&#xff1a;6.0-6.5&#xff0…

On Evaluation of Embodied Navigation Agents 论文阅读

论文信息 题目&#xff1a;On Evaluation of Embodied Navigation Agents 作者&#xff1a;Peter Anderson&#xff0c;Angel Chang 来源&#xff1a;arXiv 时间&#xff1a;2018 Abstract 过去两年&#xff0c;导航方面的创造性工作激增。这种创造性的输出产生了大量有时不…

快速降低javacv依赖包的大小

前言&#xff1a; 由于在项目中需要对视频进行缩略图的截图处理&#xff0c;引入了javacv-platform的包&#xff0c;但是打包后发现打出来的jar包非常的大 后面得知是因为javacv-platform会将所有平台的包集中起来处理&#xff0c;导致包特别的大 处理&#xff1a; 我们在项目…

NSS [MoeCTF 2022]baby_file

NSS [MoeCTF 2022]baby_file 题目源码直接给了 使用data伪协议发现被ban了。 那就换一种伪协议php://filter&#xff0c;猜测flag在同目录下flag.php中或根目录下/flag中 php://filter/readconvert.base64-encode/resourceflag.php读取文件源码&#xff08;针对php文件需要ba…