BZOJ1300 [LLH邀请赛]大数计算器

一开始以为暴力搞,后来看了数据范围还以为要FFT,各种被虐,然后Orz Seter大神!!!

我只想到了前三位:a * b <=> 10^(log(a) + log(b)),于是把乘的数都先log了最后再变回去就可以了。。。

然后后九位的方法:

Seter:"对于素数a,在N!中出现了N / a + N / a ^ 2+...次"

于是C(M, N) = N! / M! / (N - M)!就可以求每个质因数出现的次数,搞定!

 1 /**************************************************************
 2     Problem: 1300
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:164 ms
 7     Memory:1792 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <cmath>
12 #include <algorithm>
13
14 using namespace std;
15 typedef long long LL;
16
17 int n, m;
18 LL ans = 1;
19 bool p[1000001];
20
21 int main(){
22     scanf("%d%d", &n, &m);
23     m = min(m, n - m);
24
25     int i, j, x, y, c, s;
26     double k = 0, f = 1;
27     for (i = 2; i <= n; ++i)
28         if (!p[i]){
29             for (j = n, x = n - m, y = m; j;){
30                 c = (j /= i) - (x /= i) - (y /= i), s = i;
31                 for (c <<= 1; c >>= 1; s *= s)
32                     if (c & 1) ans *= s, ans %= (LL) 1e12;
33             }
34             if (i <= 1000)
35                 for (j = i * i; j <= n; j += i)
36                     p[j] = 1;
37         }
38     for (i = 1; i <= m; ++i){
39         if (f > 1e7)
40             k += log10(f), f = 1;
41         f = f * (n - m + i) / i;
42     }
43     k += log10(f);
44
45     if (k < 13) printf("%lld\n", ans);
46     else printf("%d...%09lld\n", (int) (pow(10, k - floor(k) + 2) + 1e-5), ans % (int) 1e9);
47     return 0;
48 }

p.s.话说Seter竟然可以C、C++混用,真是碉堡了。。。

时间: 2024-11-04 23:33:54

BZOJ1300 [LLH邀请赛]大数计算器的相关文章

bzoj 1299: [LLH邀请赛]巧克力棒(nim游戏的应用)

1299: [LLH邀请赛]巧克力棒 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 420  Solved: 231 [Submit][Status][Discuss] Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒).你能预测胜负吗? Input 输入数据共20行. 第2i-1行一

数据结构设计——大数计算器

  1 /*  2 大数计算器  3   4 实验目的:数据结构主要是研究计算机存储,组织数据,非数值计算程序设计问题中所 出现的计算机操作对象以及它们之间的关系和操作的学科.数据结构是介于数学.计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计.数据库.操作系统.编译原理及人工智能等的重要基础,广泛的应用于信息学.系统工程等各种领域.学习数据结构是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理.通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业

具有编译功能支持无限大数计算器的实现

本篇是MathAssist的第三篇,将在上篇所实现的BigNumber基础上完成具有编译功能支持无限大数的计算器SuperCalculator. 要想从形如 "(1.23435+sin(0.5*180/PI))*2468.2345" 字符串格式的表达式中求值,需要使用编译原理的知识,不过在一般的<数据结构>课程中都会讲解基础的表达式求值问题,而本篇也是在数据结构课程的基础上稍加拓展而实现. 多叉树的节点类型 node继承体系 表达式的值,一般将其转化成二叉树结构,根节点表示

bzoj:1299: [LLH邀请赛]巧克力棒

原题:http://www.lydsy.com/JudgeOnline/problem.php?id=1299 众多dalao的题解已经很详细了:http://blog.csdn.net/wzq_qwq/article/details/47258871 这里我只补充一下用高斯消元的方法优化到14*14*30的时间复杂度,而不是2^14 目标是求出是否有一种取数方案使异或和为0 那么按位拆分一下,得到30个方程,但是只有14个变量.解是肯定存在的(全部不取),但是我们希望解的数量大于一.由于解的数

BZOJ1299 [LLH邀请赛]巧克力棒

怎么又是博弈论...我去 Orz hzwer,这道题其实是可以转化成Nim游戏的! "第一步: 先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0,同时使得剩下的n-m根巧克力棒无论怎么取,xor和都不为0. m根巧克力棒的xor和为0 <=>把nim游戏的必败状态留给对方 剩下的n-m根巧克力棒无论怎么取,xor和都不为0 <=>  m为巧克力棒的xor和为0的最长子序列 第二步: 第一步以后,对手就面临一个必败状态的nim游戏. 如果他从n-

BZOJ 1299 [LLH邀请赛]巧克力棒 博弈(NIM游戏)+构造

题意:链接 方法:博弈+构造 解析: 神题没想到咋做,看完wyf大爷说的话才懂 这道题的题意就是有n堆石子,之后你每次操作有两种做法 第一种是在已经建立的nim游戏上进行nim游戏. 第二种是在未被选的堆中选取若干堆加入这个nim游戏中. 所以这怎么做? 我一直尝试去建立一个必败态,不过可能我走的方法过多的考虑了将这道题转变为nim游戏套nim游戏而最终走入死胡同,不会做了. 然而这道题的必败态可以这么建:如果是先手的话,我可以建立出来一个异或和为0的nim游戏,此时后者有两种做法,第一种是在该

【BZOJ】1299: [LLH邀请赛]巧克力棒

[算法]博弈论 [题解]这道题不是典型的SG函数题了. 不把它当成游戏看待,那么这道题是在说n个石子堆,每次可以加入若干个或进行Nim游戏. 我们当前先手,则考虑构造必败态来获胜. 当前已加入的NIm游戏SG=0,则必须考虑加入石子堆,若加入m堆构造出SG=0,对方有两种选择: 加入新的石子堆,则必须是SG=0. 进行Nim游戏,但是目前SG=0,先手必败. 所以只要把n堆中异或和=0的最长子序列在第一次操作时移入即可先手必胜. #include<cstdio> #include<alg

【bzoj1299】[LLH邀请赛]巧克力棒 博弈+模拟

Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒).你能预测胜负吗? Input 输入数据共20行. 第2i-1行一个正整数Ni,表示第i轮巧克力棒的数目. 第2i行Ni个正整数Li,j,表示第i轮巧克力棒的长度. Output 输出数据共10行. 每行输出“YES”或“NO”,表示TBL是否会赢.如果胜则输出”NO”,否则输出”YES

BZOJ1299: [LLH邀请赛]巧克力棒(Nim游戏)

Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 552  Solved: 331[Submit][Status][Discuss] Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒).你能预测胜负吗? Input 输入数据共20行. 第2i-1行一个正整数Ni,表示第i轮巧克力棒的数目.