- 博客(73)
- 收藏
- 关注
原创 uva 11526 H(n)(公式优化)
点击打开链接求s=n+n/1+n/2+....n/(n-1)+n/n;nn=20 s=20+10+6+4+4+3+2+2+2+2+1+1+1+1+1+1+1+1+1+1因为下取整原因 许多项都会相同 把相同项乘起来以后,跳着加 时间复杂度i从小到大 若第一次n/i=t 则当前i为满足(下取整)n/i=t的最小i n/i=t.Bi增加&&n/i=t(下取整) n/i=t.B
2016-10-31 21:32:52 319
原创 hdu 5944 Fxx and String 暴力(水)
点击打开链接题意:给定一个字符串s,求有多少个三元组(i,j,k)满足i,j,k是等比数列且s[i]=='y'&&s[j]=='r'&&s[k]=='x'。注意点:公比可能小于1#include #include #include #include #include #include #include #include using namespace std;
2016-10-29 22:37:48 468
原创 hdu 5945 Fxx and Game dp(单调队列优化)
点击打开链接题意:求数x最少经过多少次变换能变为1,(1)如果x%k==0,那么可以x=x/k。(2)x=x-i,(1//dp[1]=0//dp[i]=min(min(dp[i-t]~dp[i-1])+1,dp[i/k]+1) 用单调队列保存dp(i-t~i-1)中最小值的下标即可#include #include #include #include
2016-10-29 22:25:04 964
原创 hdu 5646 Partition数学+构造
点击打开链接//把n拆分成不同k个数之和 使得k个数乘积最大//因为C=A+B A+2AB //推出k个数为连续的 或者为连续两段中间差2,构造这k个数即可 #include #include #include #include #include using namespace std;typedef long long ll;const ll mod=1e9+
2016-10-29 10:19:35 627
原创 hdu 2204 容斥原理
点击打开链接以下为参考大牛http://blog.csdn.net/acm_cxlove/article/details/7873776题目:求出1-N里面能表示 成M^K的数有多少个求A^B在//如果A^B在i>=1)//因为2^60>1e18所以 B不超过60另外B考虑质因子,如果A^4在范围内的话,肯定(2*A)^2也在范围内,没有必要重复考虑
2016-10-27 21:19:19 310
原创 uva 1644 Prime Gap 二分
点击打开链接#include #include #include using namespace std;typedef long long ll;const int N=1e5+20;const ll M=1299709;vector p;ll n;bool check(int x){ for(int i=2;i*i<=x;i++) { if(x%i==0)
2016-10-27 19:40:42 434
原创 hdu 1540 线段树(区间合并入门)
点击打开链接#include #include #include using namespace std;typedef long long ll;const int N=5e4+20;int s[N];struct node{ int l,r; int ls,rs,ms;//左端,右端,最大连续,ms区间最大连续 }a[N<<2]; void build(int l,i
2016-10-27 17:04:11 299
原创 codeforces 626D 概率+暴力
点击打开链接题意:三局两胜,前两局A胜,第三局B胜,问最后B的得分总和大于A的可能性。//总的事件个数为C(n,2)^3 //cnt[a] 赢的一局相差a时的方法数 cnt2[b],输的两局总和相差b的方法数 利用前缀和变为求出相差//则要求输掉前两局,赢第三局&&输的人总得分大(差距a-b>0)的方法数为: tot+=cnt2[i]*cnt[i+1] i=0~M
2016-10-27 14:57:45 349
原创 uva 294 Divisors 求因子个数
点击打开链接//因子个数函数为乘性函数//或者说选出一个因子的方法数有ans种 每种方法中因子都不同 所以因子个数有ans个#include #include #include using namespace std;typedef long long ll;const int N=333333;int p,num;int prime[N+20],vis[N+20],
2016-10-27 13:55:21 326
原创 uva 10622 Perfect Pth Power(算数基本定理)
点击打开链接给出n,求n=b^d的最大d分解n=p1^ap2^bp3^c..要使n=(p1^(a/d) p2^(b/d) p3^(c/d))^d&&d最大 则d为cnt个因子 幂的gcd#include #include #include using namespace std;typedef long long ll;const int N=333333;int
2016-10-27 13:15:32 451
原创 poj 2773 容斥原理+二分(求与n的第k互质数)
点击打开链接#include #include #include using namespace std;typedef long long ll;const int N=1e6+20;const ll inf=1e12;ll n,k,num,ans;int fac[N];void Get(ll n){ for(int i=2;i*i<=n;i++) { if(n%
2016-10-26 22:50:27 569
原创 hdu 1796 How many integers can you find(容斥原理)
点击打开链接#include #include #include using namespace std;typedef long long ll;const int N=1e6+20;ll n,m,num,ans;int fac[N];ll gcd(ll a,ll b){ if(a%b==0) return b; else return gcd(b,a%b);}
2016-10-26 14:43:14 311
原创 hdu 4135 Co-Prime 容斥入门
点击打开链接求A~B中与N互质的数的个数.算A~B不与N互质的数的个数即分解N素因子N=x1^p1x2^p2...xn^pn 1~B中x1的倍数有B/x1,即用容斥算x1Ux2U..xn的个数#include #include #include using namespace std;typedef long long ll;const int N=1e6+
2016-10-26 11:20:29 277
原创 codeforces 626C 二分判定
点击打开链接#include #include using namespace std;typedef long long ll;int n,m;const long long inf=6e6;bool check(ll x){ //最大数x之前 至少有n个2的倍数,m个3的倍数 if(x/2<n||x/3<m||(x/2+x/3-x/6)<n+m)//2 3倍数集合中个数不
2016-10-26 09:45:04 367
原创 UVA 808Bee Breeding(构造 建立坐标系)
点击打开链接#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e5;int dx[5]={-1,0,1,1,0};int dy[5]={1,2,1,-1,-2};struct Point{ int x; int y; P
2016-10-25 15:44:12 404
原创 UVA 1608 Pole Arrangement(递推)
点击打开链接dp[i][j][k] 高度1~i 左边看到j根 右边看到k根的方法数 高度2~i的排列数等价于高度1~i-1的排列数(相当于1~i-1每个排列方案中每个高度+1即可) (2~i每个排列方案中高度都-1)考虑2~i放好时(子问题) 插入1到左边,右边和中间i-2个空三个分类即可#include #include #include using namespa
2016-10-25 14:30:56 380
原创 hdu 1560 DNA sequence(IDA*)
点击打开链接IDA* :限制dfs深度+最优性cut#include #include #include using namespace std;const int N=10;int n;char DNA[5]={"ACGT"},s[N][N];int pos[N];//pos[i]:s[i]目前匹配的字符个数 int size[N];//char seq[N];//母串
2016-10-25 14:13:14 310
原创 Codeforces 624D Array Gcd(数论+dp)
点击打开链接//因为DEL只能操作一次&&不能删除所有元素// a1 an 至少有一个存在->最后的gcd肯定为a1或者an的某个因子//只要求gcd>1所以贪心:扫素因子即可(素因子已经满足题目要求 在大没有意义,反而可能增加操作)枚举素因子产生的Gcd,用Dp求最小花费dp[i][j]表示扫描到第i个元素时 没有删除元素/正在删除元素/已经删除完元素的最小代价。
2016-10-24 17:59:44 504
原创 codeforces 725D Conteset Balloons 贪心
点击打开链接//要想rank靠前 每次做的操作只能:花费气球挤掉比自己高的 贪心:用越少气球挤掉一个排名高的人(剩的气球越多排名就越高.) 每一次操作更新答案即可#include #include #include #include using namespace std;typedef long long ll;typedef pair P;priority_queue
2016-10-24 16:37:15 289
原创 codeforces 725C Hidden word(构造)
点击打开链接参考//s[x]=s[y] 构造:则保证x与x-1,x+1,y-1,y+1相邻,其他的元素按照原来顺序放即可; // ..x开始顺势针放 dif/2 保证s[y-1]和s[x]相邻 (两行末尾为s[x]~s[dif/2],, s[y-1]~s[dif/2+1])//s[y+1]~s[len-1] s[0]~s[x-1]连成一串 取0~12-dif/2,放到s[x]之
2016-10-23 17:47:13 491
原创 uva 580 Critical Mass(递推)
点击打开链接//f[i] i个box 放U和L 至少连续3U的方法数ll g[N+20];//g[i] i个box 放U和L 没有连续3U的方法数 g[i]=2^n-f[i] // 根据第一次出现的连续3U进行分类计数 若i~i+2为3U则i-1只能为L 前面i-2个不能有3U方法为g[i-2] 后面n-i-2个box任意 2^(n-i-2) // f[i]=segam(g[i-2
2016-10-22 22:44:18 343
原创 uva 12034 Race递推
点击打开链接//f[i] i个人的排名方法数//按第一名进行分类计数 f[i]=c(n,k)*f[n-k](k为第一名人数 k=1~n)#include #include #include using namespace std;const int N=1e3+20;const int mod=10056;typedef long long ll;ll f[N+2
2016-10-22 22:29:50 346
原创 codeforces 624C 二分图染色
点击打开链接//b和a,c都相连 不相连的只有a-c 所以原图中的两点无边只能为a-c //在补图中确定颜色法案后,还要在原图中check一遍#include #include #include #include #include #include #include #include #include #include #include using names
2016-10-21 23:19:24 526
原创 UVA 10491 Cows and Cars(全概率)
点击打开链接//对一开始选的门进行划分//r1一开始选到牛switch后选到car 两个独立事件 //r2一开始选到车switch后选到car//switch后还有a+b-c-1个门可以选 #include #include #include #include using namespace std;const int N=1e5+20;int main()
2016-10-21 12:26:25 262
原创 codeforcs 722D 贪心(对最值操作)
题目链接//为了使最大值最小,每次选最大值&&把最大值不断除以2 碰到!vis[x']时停止,x'为0说明最值无法变化,退出即可//x>y x'// x'>y时 下一步时会继续对x'进行操作,进一步缩小最大值 #include #include #include #include #include #include using namespace std;c
2016-10-21 12:03:29 461
原创 codeforces 621C(数学期望)
点击打开链接//f[i] a[i]和a[(i+1)%n]之积能被p整除的概率 //E=segmaE[i]=segma(f[i]*2000)//如何求f[i]? //因为p为素数 (a,p)=1,(b,p)=1 (ab,p)=1(反证法易证明)//l[i]~r[i]中能被p整除的数的个数有: r/p-(l-1)/p (p组一个) //F[i](从a[i]中取出不被整除的概率
2016-10-20 22:27:55 716
原创 codeforces 621B 对角线计数
点击打开链接#include #include #include #include #include #include using namespace std;typedef long long ll;const int N=2e3+20;int f[N],s[N];int main(){ int n; cin>>n; memset(f,0,sizeof(f));
2016-10-20 17:27:21 393
原创 hdu 5916 Harmonic Value Description 构造
题目链接//最小的为gcd(pi,pi+1)都为1 1~n奇偶互质 /则第k小的为有一个gcd(pi,pi+1)=k 其余为1//条件2k//k-1和k+1要隔开所以 k后面放k-1~1 然后k+1~n即可保证两两互质 #include #include #include #include #include using namespace std;type
2016-10-20 15:35:51 223
原创 uva 1210 sum of CONSECUTIVE prime num 暴力or尺取
点击打开链接法1打表:可以间接的由prime来更新ans(枚举连续和的长度和起点即可) 法 2sum of CONSECUTIVE 尺取#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e4;vector p;l
2016-10-20 13:29:34 369
原创 uva 10539 Almost Prime 暴力
点击打开链接//求(l,r)内r//则满足条件的素因子 若素因子大于10^6则要么为素数要么含有另外一个#include #include #include #include #include using namespace std;typedef long long ll;const int N=1e6;vector p;//10^12内只有一个素因子&&不是
2016-10-20 12:34:48 406
原创 uva 1213 sum of different primes 01背包(二维)
点击打开链接#include #include #include #include #include using namespace std;typedef long long ll;const int N=1120;vector p;//素数表ll dp[210][16][N+1];//dp[i][j][n] 前i个选j个和为n的方法数 int size,n,k
2016-10-20 11:00:52 331
原创 hdu 2181 哈密顿绕世界(dfs+回溯)
点击打开链接#include #include #include using namespace std;const int N=30;int g[N][5],m,cnt=0;int vis[N],path[N];void print(){ printf("%d: ",cnt); for(int i=1;i<=21;i++) { printf("%d",path[
2016-10-19 22:08:49 414
原创 hdu 5918 暴力kmp
点击打开链接求满足 aq,aq+p,aq+2p,,aq+(m-1)p=b1..bm 的子串数a[i]=b[j] 主串i+=p 则把主串分组 每组长度为a/p,进行kmp匹配即可#include #include #include #include #include #include using namespace std;typedef long long ll;co
2016-10-19 15:32:20 442
原创 hdu 1023Catalan出栈方案+大数
点击打开链接Catalan//入栈顺序递增1...n 求出栈方式有多少种//对编号1进行分类 编号1为出栈序列的第k个元素//则方案为f(k-1)*f(n-k) k从1累加到n,母函数求递推公式得到 f[n]=f(n-1)*(4n-2)/(n+1) #include #include #include #include #include #include
2016-10-19 12:09:48 357
原创 uva 11181 Probability|Given 条件概率
点击打开链接//求在r个人买东西的情况下 第i个人买东西的概率//p(Ei|E)=p(EiE)/p(E) //枚举r个人买东西的情况 利用全概率 算出P(E) //n=4 r=2例如P(E2E)=P(1100)+P(0110)+P(0101) //P(EiE) 画个维恩图就知道了->P(EiE)为状态不同E中a[i]=1的累加和 //即全概率中对E进行划分-> P(Ei
2016-10-19 11:06:12 309
原创 FZU 2020 组合数取模(Lucas定理模版)
点击打开链接Lucas定理证明点击打开链接#include #include #include #include #include #include using namespace std;typedef long long ll;const int N=1e5+20;ll quick_mod(ll a,ll b,ll p){ ll res=1; while
2016-10-18 18:46:15 381
原创 codeforces 377D exam贪心判定+二分
点击打开链接贪心判定考试复习时间可以间断,则如果在第i天考科目day[i],相当于在前i-1天中,要任意填入day[i]个(前i-1天要有day[i]个空位)贪心:若在x天完成全部考试 第y1和第y2天都能考同一个科目&&y2>y1显然选择在靠后的第y2天考该科目 y2的空位数>=y1的空位数 #include #include #include #inclu
2016-10-18 17:28:45 559
原创 codeforces 731F 暴力(前缀和)
点击打开链接//枚举a[i]作为secondary //其余要选的数 必须为a[i]的倍数 x=p*a[i] //如果 a[j]在p*a[i]~(p+1)*a[i]之间 按照题意 a[j]可以降为p*a[i]//重点:如何快速判断 p*a[i]~(p+1)*a[i]-1之间有多少个a[j]? //利用前缀和思想 cnt[i]记录1~i中出现的元素个数 则a,b内元素
2016-10-17 22:19:46 697
原创 codeforces 731C 并查集+贪心
点击打开链接利用并查集把颜色要相同的下标放在同一集合中,贪心:找到每个集合中出现最多的颜色 把剩下的颜色变为该颜色即可 ans+=size-mx#include #include #include #include #include #include #include #include using namespace std;const int N=2e5+10;lo
2016-10-16 22:24:00 1057
原创 codeforces 727c 交互式输入(水)
点击打开链接#include #include #include #include #include using namespace std;const int N=1e4+20;int a[N]; int main(){ int x,y,z,n; scanf("%d",&n); printf("? 1 2\n"); fflush(stdout); scanf("
2016-10-16 16:37:06 987
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人