![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACMlightOJ
TouchDreamer
这个作者很懒,什么都没留下…
展开
-
Light OJ 1024(高精度乘)
题目分析 这道题要求n个数的最小公倍数,但是需要进行高精度进行处理。#include <map>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e6+100;map <in原创 2017-01-15 13:44:51 · 291 阅读 · 0 评论 -
Light OJ 1282 Leading and Trailing
题目分析 这道题的后三位直接快速幂即可,但是输出需要处理一下,不够的补0即可。前三位我们可以利用log10 n运算,我们就可以得到一个数,那么很明显这个数整数部分是科学计数法中10的倍数,小数部分就是对应的数值了,对应乘100正好可以得到三位数。#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#原创 2017-02-19 19:17:08 · 330 阅读 · 0 评论 -
LightOJ 1236 Pairs Forming LCM(唯一分解定理)
题目分析 思路:把n分解成素因数的形式n=p1^c1+p2^c2+…pm^cm 假设已找到一对(a,b)的lcm=n 有a=p1^d1+p2^d2+…pm^dm b=p1^e1+p2^e2+…pm^em 易知max(di,ei)=ci 先考虑有序数对(a,b),由唯一分解定理知,a的每一个素因数的幂的大小都决定一个独一无二的数。 所以(a,b)的种数就是(di原创 2017-01-17 19:16:29 · 424 阅读 · 0 评论 -
LightOJ 1278 Sum of Consecutive Integers
题目分析 这道题一开始没有思路,然后看了网上的推导过程。具体是这样:sum=a+(a+1)+(a+2)+......+(a−k+1)sum = a+(a+1)+(a+2)+......+(a-k+1),然后可以推出式子n=(2a+k−1)/(2k),2a−1=2n/k−kn = (2a+k-1)/(2k), 2a-1=2n/k-k,因为2a−12a-1为奇数,所以k必须为奇数。(奇数*偶数=偶数原创 2017-01-17 17:32:29 · 326 阅读 · 0 评论 -
LightOJ 1259 Goldbach`s Conjecture
题目分析 就是打表,然后发现超内存,然后用了bool数组发现过了,才400ms,表示这个OJ跑的真快。对于素数注意判重。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e7;#define LL long l原创 2017-01-17 16:15:28 · 315 阅读 · 0 评论 -
lightOJ 1245 Harmonic Number (II)
题目分析 我的做法就是枚举1到sqrt(n),然后会发现n/i只会出现一次,但是对应的i会出现(n/i-n/(i+1))次,可以想一下如果n为100,那么1出现(100/1-100/2)次,即100除以51,52,52……..100都为1。因此1直接计算即可。#include <cmath>#include <cstdio>#include <cstring>#include <iost原创 2017-01-17 15:48:50 · 320 阅读 · 0 评论 -
lightOJ 1220 Mysterious Bacteria
题目分析 这道题我就是直接枚举sqrt(n)的出的结果,但是当n为负数且得到的p是偶数是明显是不合理的,因此遇到这种情况continue即可。#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define LL原创 2017-01-17 15:12:02 · 240 阅读 · 0 评论 -
lightOJ 1215 Finding LCM
题目分析 借鉴了别人的代码,其实就是通过a∗b=gcd(a,b)∗lcm(a,b)a*b = gcd(a,b)*lcm(a,b)来求其中一个未知量,并且要未知量最小。代码中的注释写的非常清楚。#include <bits/stdc++.h>using namespace std;typedef long long ll;ll gcd(ll a, ll b){ return b ?原创 2017-01-17 14:21:58 · 224 阅读 · 0 评论 -
LightOJ 1197 Help Hanzo
题目解析 本题就是一道双重素数筛的题目,在挑战程序设计上也有介绍,但是本题我忽略了1不是素数,wa了一发。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define LL long longconst int maxn = 1e5+100;原创 2017-01-17 12:50:14 · 325 阅读 · 0 评论 -
LightOJ 1138 Trailing Zeroes (III)
题目分析 这道题刚开始拿到手中并没有什么好的想法,但是自己想一下会发现,n!我们会发现末尾含有0,说明相乘的时候必然可以拆分出2和5,同时是2的倍数明显比5的倍数多很多,那么我们找0的个数就等价于找5的个数,然后对于5的个数,我们通过二分是5的多少倍,同时我们需要求出是51,52,53,.....,5m5^1, 5^2, 5^3,....., 5^m的多少倍,累计即可。#include <cs原创 2017-01-17 10:17:43 · 188 阅读 · 0 评论 -
LightOJ 1138 Trailing Zeroes (III)
题目分析 这道题刚开始拿到手中并没有什么好的想法,但是自己想一下会发现,n!我们会发现末尾含有0,说明相乘的时候必然可以拆分出2和5,同时是2的倍数明显比5的倍数多很多,那么我们找0的个数就等价于找5的个数,然后对于5的个数,我们通过二分是5的多少倍,同时我们需要求出是51,52,53,.....,5m5^1, 5^2, 5^3,....., 5^m的多少倍,累计即可。#include <cs原创 2017-01-17 10:13:34 · 251 阅读 · 0 评论 -
lightOJ 1246 Colorful Board
题目分析 首先我们可以利用坐标来观察,我们发现x+y坐标之和为偶数的颜色可以相同,奇数的也可以相同,所以我们就可以将图分成2部分,然后进行染色。当然这里我们用dp方程打表推出染色所需要用到的各种方法数。dp[i][j]表示用j种颜色染i个格子的方案数,注意这里面j中颜色必须全部用完,因此状态转移方程为dp[i][j] = dp[i-1][j]*j+dp[i-1][j-1]*j;预处理一下即可计算原创 2017-01-12 13:28:15 · 213 阅读 · 0 评论 -
LightOJ 1090 Trailing Zeroes (II)
题目分析 这道题的意思就是让你求Crn∗pqC_n^r*p^q中末尾0的个数,那么很明显就是让你求算得的10的个数,而10能转化为2*5,那么我们就可以打表求10610^6范围内每个数可以表示成2和5分别的个数。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespac原创 2017-01-16 16:46:35 · 208 阅读 · 0 评论 -
LightOJ 1077 How Many Points? (变种gcd)
题目分析 这道题是挑战程序设计上的原题,就是求gcd(abs(x1-x2), gcd(y1-y2))+1;#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;LL gcd(L原创 2017-01-15 20:10:46 · 462 阅读 · 0 评论 -
LightOJ 1326 Race (第二类Stirling数)
题目分析 第二类Stirling数 S(p,k) S(p,k)的一个组合学解释是:将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。 k!S(p,k)是把p个人分进k间有差别(如:被标有房号)的房间(无空房)的方法数。 S(p,k)的递推公式是:S(p,k)=k*S(p-1,k)+S(p-1,k-1) ,1<= k<=p-1 边界条件:S(p,p原创 2017-01-10 21:14:51 · 273 阅读 · 0 评论 -
lightOJ 1382 The Queue
题目分析 具体看代码吧,树形dp的思想,dp[i]表示父节点下面所有子树节点合理排列的方法数。。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1005;const int mod = 1e9+7;#defi原创 2017-01-10 20:28:59 · 272 阅读 · 0 评论 -
lightOJ 1045 Digits of Factorial (数位计数)
题目分析 首先我们知道log(a∗b)=log(a)+log(b)log(a*b) = log(a)+log(b),那么很明显如果是在k进制下n的阶乘,那么位数为lognk!+1=log1k+log2k+log3k+......+lognk+1log_k^n!+1 = log_k^1+log_k^2+log_k^3+......+log_k^n+1,那么结果已经很明显了。我们可以先处理处10进制原创 2017-01-15 16:40:57 · 260 阅读 · 0 评论 -
lightOJ 1028 Trailing Zeroes (I)
题目分析 我们首先可以发现如果一个数x能转化为另一个y进制,很明显x能整除y。这样一来就转化成求因子数 x=p1a1∗p2a2∗p3a3∗.......∗pnan x = p1^{a1}*p2^{a2}*p3^{a3}*.......*pn^{an} 这样因子个数为: ans=(1+a1)∗(1+a2)∗(1+a3)∗......∗(1+an)ans = (1+a1)*(1+原创 2017-01-15 14:49:08 · 218 阅读 · 0 评论 -
LightOJ 1289 LCM from 1 to n
题目分析 这道题首先给人的感觉就是素数筛,但是空间明显不够,但是看看时间好像可以在4ms算完,于是就要优化空间了,然后学习了一个神奇的数据结构位图。话说位图看了半天其实就是在每个数组中用保存的2进制数来表示该数是否存在。因此我们设mod为32,那么对与每一个数i都可以的到一个商即i/mod,和一个余数i%mod,并且这一对数是唯一的,因此我们就可以在vis下标为i/mod存储1<<(i%mod)原创 2017-03-01 21:26:32 · 529 阅读 · 0 评论