数论
MissAnnLucky
Cease to struggle cease to live.
展开
-
URAL 1108. Heritage 高精度大数乘法
比赛时想了俩小时都没有想出来,当时只是想用dfs暴搜,好不容易写出来了才发现用unsigned long long都存不下,没想到其实找到规律大数乘法就行了。规律:2 3 7 43 1807 num[4]=(num[3]-1)*num[3];(这个比赛时都没发现)。另外,由于数比较大,是模1000存的。通过近几天做老师的题和前辈们的题发现没有一个OJ题是很直白的,读完题按照题意写程序往往原创 2013-07-31 16:00:51 · 681 阅读 · 0 评论 -
URAL 1233. Amusing Numbers
这个题想了有两天时间。。。。。。。。智商,IQ,,,,,,,,,,,,,,,,哎,,看了学姐的博客,又研究了一下,下面这段话是她博客中的: 参照了nocow上的解法,照搬过来……易知一个数X在数列中在另一个数Y前,当且仅当X前缀小于Y或前缀相等X短,那么我们分布考虑,比如对于数48561:5位上:10000~48560;4位上:1000~4856;原创 2013-08-06 19:35:20 · 637 阅读 · 0 评论 -
SGU107. 987654321 problem 暴利找规律
乍一看没什么思路,一个n位数的平方的后9位只与这个数的后九位有关,所以写个测试程序暴利找出满足条件的数,发现9位的有8个,这样10位的就有9*8=72个,11位的有10*9*8个。#include#include#include#define ULL unsigned long longusing namespace std;int main(){ //freopen("原创 2013-08-08 14:59:37 · 485 阅读 · 0 评论 -
SPOJ 362. Ignore the Garbage 规律+大数除法
上下颠倒,数字反过来仍是有效数字的有0,1,2,5,6,8,9,反过来就是0,1,2,5,9,8,6.所以这样组成的有效数字是:0,1,2,5,9,8,601,11,21,51,91,81,6102,12,22,52,92,82,6205,15,25,,55,95,,85,65。。。。。。。。。。001,101,201,501,901,801,601可以发现每7个一原创 2013-08-10 14:06:32 · 770 阅读 · 0 评论 -
SGU 231. Prime Sum 素数打表
这个题要特别注意time limit per test: 0.5 sec. memory limit per test: 4096 KB,所以在构造素数表以及标记数组都要特别注意。#include#include#includeusing namespace std;int isprime(int n){ for(int i=2; i*i<=n; i++)原创 2013-07-28 08:42:10 · 562 阅读 · 0 评论 -
HDU 1239 Calling Extraterrestrial Intelligence Again 素数表
每次遇到这样的题都无从下手,其实根据题意分析一下,并不难,模拟就可以了。这个题先构造100000以内的素数表,然后根据条件判断就OK。#include#include#include#define MAXN 100010using namespace std;bool prime[MAXN];void intline(){ prime[1]=false; prim原创 2013-08-15 09:54:25 · 630 阅读 · 0 评论 -
HDU 2136 Largest prime factor 3种求素数表的方法
总结了3种求素数表的方法第一种:void intline(){ memset(prime,true,sizeof(prime)); prime[1]=false; prime[0]=false; for(int i=2; i*i<MAXN; i++) { for(int j=2; j*i<MAXN; j++)原创 2013-08-15 17:34:54 · 709 阅读 · 0 评论 -
HDU 1207 汉诺塔问题
转载于http://qianmacao.blog.163.com/blog/static/203397180201211555939662/http://acm.hdu.edu.cn/showproblem.php?pid=1207思路是借鉴网上一大牛的,写的很完美了,所以一句没改变体汉诺塔 问题描述:在经典汉诺塔的基础上加一个条件,即,如果再加一根柱子(转载 2013-08-16 10:21:13 · 491 阅读 · 0 评论 -
HDU 4722 WA求大神指教(已经更正)
规律很容易发现,从10开始,每10个数,有一个满足条件。即19,28,37,46,55,64,73,82,91,109,118,127,136,145,154,163,,,,,,, 代码如下:#include#include#include#define LL long longusing namespace std;int main(){// fre原创 2013-09-20 10:16:24 · 710 阅读 · 3 评论 -
URAL 1200. Horns and Hoofs 枚举+数学
接触的东西越来越来反而变得不够灵活了,以前碰到的这样的题都要暴力,枚举,两个for循环试试的,今天看到时脑子里接着想暴力会超时的,但是好几个人都200+ms过了,我一直在推导,证明,最后越推越麻烦,一个题也没做出来,其实这个题很简单的,O(A的范围的算法),一个for循环,枚举A的个数,然后根据profit=A*a+B*b-a*a-b*b,是y的二次函数,根据图像b=B/2时最大,然后以此为轴,两原创 2013-08-05 13:38:59 · 806 阅读 · 0 评论 -
HDU 4379 The More The Better
真是个奇葩的题目!卡了N次。 1.并不一定是连续的子串,这个题相当于从n个数中挑出符合条件的数。 2.很容易超时,我超时的原因是用了 maxx=max(maxx,num);而换成 maxx=maxx>num?maxx:num;就不会超时。 3.思路:找出的子串中任意的两个相加都L/2的数中最小的一个即minn,最后如果min原创 2013-07-28 10:18:34 · 459 阅读 · 0 评论 -
CF 305B Continued Fractions
#include#include#include#include#include#include#define LL long longusing namespace std;LL gcd(LL a,LL b){ return b==0?a:gcd(b,a%b);}LL num[100];int main(){ //freopen("in.txt","r原创 2013-07-31 23:24:50 · 608 阅读 · 0 评论 -
SPOJ 416. Divisibility by 15
#include#include#include#include#includeusing namespace std;int num[10];char str[1010];int solve(int sum){ if(sum%3==1) { if(num[1]>0) { num[1]原创 2013-08-01 08:28:06 · 660 阅读 · 0 评论 -
SGU 113. Nearly prime numbers 素数
m*n=p并且m,n都是素数,那么一定是m,n一个比sqrt(p)大,一个比sqrt(p)小,或者m==n==sqrt(p),所以构造素数表时判断到sqrt(10^9)即可。#include#include#includeusing namespace std;int isprime(int n){ for(int i=2; i*i<=n; i++)原创 2013-08-01 21:07:34 · 647 阅读 · 0 评论 -
SPOJ 351. Ha-noi! 汉诺塔递归模拟
#include#include#include#define LL long longusing namespace std;long long int ha[4][70];int num[4];void cmp(LL n,LL k,int a,int b,int c){ if(n==0) return ; if(k<((LL)1<<(LL)(n-1)))原创 2013-08-01 19:42:20 · 715 阅读 · 0 评论 -
HDU 4432 Sum of divisors
#include#include#includeusing namespace std;int n,m,digit[100];int ans;void comp(int a){ int aa=a; memset(digit,0,sizeof(digit)); int i=0; while(a) { digit[i]=a%m;原创 2013-07-25 23:38:38 · 444 阅读 · 0 评论 -
SPOJ 78 Marbles
题意很简单,输入n,k,有k种小球,要拿n种,要求每种小球都至少要拿一种,很经典很直白的排列组合问题,就是高中学过的插空法,有n-1个空,插入k-1个隔板,有多少种插法。百度文库中的例子:挡板的使用例20.10个名额分配到八个班,每班至少一个名额,问有多少种不同的分配方法?分析:把10个名额看成十个元素,在这十个元素之间形成的九个空中,选出七个位置放置档板,则每一种放置方式原创 2013-07-26 12:27:12 · 531 阅读 · 0 评论 -
URAL 1117. Hierarchy 数学 找规律 二叉树
十分佩服DC学长,问他递推公式怎么得到的,他说他在纸上一划拉就划拉出来了,好吧。。。。。不过在他的指点下,我又仔细想了想,终于把这道题悟出来了。1.一次递推出1——2,1——4,……1——2^k所需的步骤,这个可以找规律的。 k=1时,即1——2, 步数:0 k=2时, 1——4, 1 k=3时,原创 2013-08-04 13:15:34 · 754 阅读 · 0 评论 -
UVALive 6182 - Ginkgo Numbers
其实是一道挺简单的题,比较重要的信息就是提供的第一条充要条件。依据这个可以判断【m,n】是否为【p,q】的因子。怎么找到这些符合的m,n呢?不用太多技巧,只要挨个数试可以了。这里要注意 1 m2 + n2 ,那么m或n最大是约是142,最小自然是-142,两个循环,暴力也不会超时。计算过程中有一点要注意,除数是不能为0的,所以对m2 + n2要特判非0,否则一转载 2013-07-28 10:03:25 · 607 阅读 · 0 评论 -
Codeforces 358A - Dima and Continuous Line 暴力+数学
自己做时没思路,看了题解,,,,,,恍然大悟,竟然是个O(n^2)的复杂度。摘自题解: #include#include#include#includeusing namespace std;int main(){// freopen("in.txt","r",stdin); int n,num[1000+10]; scan原创 2013-10-26 13:12:39 · 1473 阅读 · 0 评论