LeetCode172-阶乘后的零

2022-03-25 做题

传送门 对于任意一个数,×10就能使它尾部多一个0。分析一下样例,n=5时n!=12345=120,其实就是134(25) = 12 * 10。即,产生一个末尾0的原因是累乘的数里能凑一个“10”出来。那么我们只需要统计相乘的n个数有能凑几个10就行。更进一步简化, 由于10=2*5,且固定的范围内,因子5总是比因子2要少。所以,可以直接统计所有累乘的因子里5的数量。 class Solution { public: int trailingZeroes(int n) { if (n == 0) return 0; /* * 对于任意一个数,×10就能使它尾部多一个0 * 分析一下样例,n=5时n!=1*2*3*4*5=120,其实就是1*3*4*(2*5) = 12 * 10 * 即,产生一个末尾0的原因是累乘的数里能凑一个“10”出来 * 那么我们只需要统计相乘的n个数有能凑几个10就行 * 更进一步简化, 由于10=2*5,且固定的范围内,因子5总是比因子2要少 * 所以,可以直接统计所有累乘的因子里5的数量。 */ int cnt = 0; for (int i …

阅读全文 →

牛客contest5675-I

2020-08-10 做题

传送门 题目大意 有n个球队,每个球队都和其它所有球队比一场,即一共有 [图片缺失] 原图:https://www.nowcoder.com/equation?tex=%5Cfrac%7Bn(n-1)%7D%7B2%7D&amp;preview=true 场比赛,每天只有一场比赛。每个球队会在第一场比赛开始时到,最后一场比赛后走。请安排一个日程表,使所有球队停留的天数之和最小。输出这个日程表。 思路 样例害人啊,出题人编了一个长得很像全排列的样例... 其实仔细一想会发现全排列不仅不是通解,而且大多数情况下都不是答案。当队伍多起来时,全排列会优先满足第一个队伍,这时候其他队伍只能一个一个挨着上场,浪费了大量的等待时间。 所以最优的方案可能会是一种“折中”的方案,即不去强调每一个队的最优。 ```cpp #include using namespace std; const int INF = 0X7F7F7F7F; int t, n; int main() { cin >> t; while(t--) { cin >> n; for(int i = 2; i <= n/2; i++) …

阅读全文 →