摘要: 题意: 给你一个字符串,其中的每个字母都可以对应0-9之间的一个数字,且不同的字母不能对应同一个数字,然后就得到了一个数字,求所有这些可能得到的数字的共同约数,最多出现10个不同的字母,字符串长度最大是14。思路: 一看题目首先就感觉是暴力,10!大概300+W的复杂度,暴力求出来每一个数然后求它们的gcd,由于10^14比较大,直接枚举因子要10^7,所以先分解质因数,然后再dfs求所有情况。结果果断TLE,这时注意到有100个case,100*300W肯定会TLE啊。赛后看了别人的做法,当存在10个不同的字母时,可以直接特判,这样复杂度就可以降到9!*100,就可以过了! 后来听杨神... 阅读全文
posted @ 2013-11-29 12:01 破晓べ 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 题意: 给你一个数n,已经分解过质因子,其中有m个因子a1,a2...am和他们的个数c1,c2....cm,设pair(p,q)满足gcd(p,q)==n && 1 2 #include 3 #include 4 using namespace std; 5 typedef long long LL; 6 #define MOD 1000000007 7 int main(){ 8 int T,c,a,b,cases=0; 9 scanf("%d",&T);10 while(T--){11 cases++;12 scanf("%d&quo 阅读全文
posted @ 2013-11-27 20:22 破晓べ 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 题意: 给定一个a和n,求在1-n之间有几个数x,满足gcd(4(a+x),a^2+x^2)>1思路: 比赛的时候打表看出了规律,结果容斥都写错了,囧! 赛后看了佳哥和尧神的思路,我想问自己智商在哪!!T^T gcd(4(a+x),a^2+x^2)>1 ----> gcd(a+x,(a+x)^2-2ax)>1 (4是无关紧要的,如果没有4的时候不成立,加上4也不成立) ----> gcd(a+x,2ax)>1 (gcd(a,b)=gcd(b,a%b) 假设a是偶数,那么gcd(a+x,2ax)>1 ----> gcd(a+x,ax) 设最大公约数 阅读全文
posted @ 2013-11-26 22:13 破晓べ 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 题意: 有n个人分鱼,第一个人先来拿,检查一下总数,如果不能恰好分成n份,则扔掉多余的部分,然后拿走自己应得的1/n,第二个人也重复这个步骤,直到第n个人,然后告诉你每次扔掉鱼的数量,求一开始最少有多少鱼。方法: 对于例子 4 1 1 1 2 假设第三个人拿完以后的状态是还有X条鱼,设X = A[n]+K = 2+K,那么要满足X%(N-1)==0,且K的出现不会影响多余鱼的条数,也就是说,把这个K单独当成一部分,它可以正好分给n个人1次,那我们现在要找到这个最小的K,易知最小的K就是N*(N-1-A[N]%(N-1)),这样我们就推出了X,带入得X=6。 则第三个人拿之前的个数就... 阅读全文
posted @ 2013-11-23 22:35 破晓べ 阅读(225) 评论(0) 推荐(0) 编辑
摘要: A.Robot(hdu 4576)思路: 直接暴力之...现场赛的时候被这题坑成狗,怎么算复杂度也不够...求300MS的解法T^T#include #include#include#include#include using namespace std;double dp[2][210];int main(){ int n,m,l,r,len; while(scanf("%d%d%d%d",&n,&m,&l,&r)!=EOF) { if(n+m+l+r==0) break; memset(dp,0,sizeof(dp)); dp[... 阅读全文
posted @ 2013-08-10 21:09 破晓べ 阅读(449) 评论(0) 推荐(0) 编辑
摘要: A.Play the Dice(HDU 4586)思路: 很裸的一道概率题,容易得到公式ans=1/n*va[1]+1/n*va[2]+...+1/n*va[n]+m/n*ans,va[i]为对应位置得到的钱数,但是细节不得不注意!!第一次没看到无限多钱要输出inf,第二次没想到,即使n==m也不一定无限多钱,因为有可能每个面得到的钱数都是0.#include#includeint va[300];int main(){ int n,i,m,LL; while(scanf("%d",&n)!=EOF) { double ans=0; for(i=... 阅读全文
posted @ 2013-05-14 22:48 破晓べ 阅读(457) 评论(0) 推荐(0) 编辑
摘要: E.Electric System Restore 如果没有k个城市可以独立供电,我们就直接找到x和y的中位数,然后计算距离和就可以了,现在要去掉k个城市,很明显,中位数位置的偏移不超过k/2+1,这样,我们分别枚举x和y在[n/2-k/2-1,n/2+k/2+1]的位置就可以找到最优情况了.UESTC 1650#include<cstdio>#include<queue>#include<iostream>#include<algorithm>using namespace std;int tx[1010],ty[1010],change[10 阅读全文
posted @ 2013-04-30 23:37 破晓べ 阅读(250) 评论(0) 推荐(0) 编辑
摘要: C.Lucky Number 容斥原理,刚开始一直苦于想不出后面NBUN个数至少有一个不能整除怎么保证...后来还是ry提醒才想到,居然可以反过来想,假设这NBUN个元素分别为a1,a2....aNBUN ,也就是只要不能整除Temp=lcm(a1,a2....a NBUN)就行了,然后对于剩下的NBLN个只要有一个可以整除就合法的元素直接容斥就可以了,在过程中要保证每次减掉能整除Temp的情况就编程裸容斥了,注意lcm可能爆long long,要特殊处理!!一直调到最后才AC,真心坑队友啊ToT..ZOJ 3233#include <iostream>#include <c 阅读全文
posted @ 2013-04-30 20:12 破晓べ 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 百度之星2个小时只能做1题已经成定式了....只求1题赚点小分就知足了..orz 比赛一开始,看到第一题激动了半天,正好这几天在学概率dp,看来RP守恒真不是盖得= =,飞速敲完后,完美过了样例,正自恋着准备交,听到X神说被坑了...仔细一想,当时的想法确实是错误的。幸好还没交!错误代码1:思路:ans[i]表示长度为i的串的期望时间,则ans[i]=∑(max(ans[j-1],ans[i-j])+1)*(1/i) [j代表当前爆炸的位置],然后从前往后递推就行了View Code #include<stdio.h>double dp[410];double max(double 阅读全文
posted @ 2013-04-27 22:28 破晓べ 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 概率dp入门篇1.hdu 3853 LOOPS 思路:用dp[i][j]表示在i,j点的期望步数,p[i][j][k](k=0-2)表示i,j点的3个概率,假设所有期望都是已知: 则dp[i][j]=p[i][j][0]*(dp[i][j]+2)+p[i][j][1]*(dp[i][j+1]... 阅读全文
posted @ 2013-04-24 18:45 破晓べ 阅读(690) 评论(0) 推荐(1) 编辑