bzoj3131
    
                
摘要:这是一道很好也很烦的综合题……首先我们肯定要先把f(i)处理出来这是毫无疑问的我们要求出数位乘积为now的个数,首先是空间上的问题直接肯定会爆空间,不难发现乘积的质因数只有2,3,5,7,并且指数也不是特别大暴力可得到不同的乘积最多只有15000不到然后我们就可以对其离散化然后数位dpdp完之后,对...
        
阅读全文
                    posted @ 
2014-08-28 22:58 
acphile
        
阅读(157) 
         
        推荐(0)     
                 
                
                
    bzoj1799
    
                
摘要:这是一道比较难的数位dp因为逐位统计好像无法处理数位和整除原数的但是有了刚才的bzoj1072的经验,我们能做的是逐位处理被一个数d整除的方案不难想到先穷举数位和now,now最大也就162,可以承受然后在统计数位和为now且能整除原数的方案我们用f[less,i,j,k]表示第i位是否必须小于n的...
        
阅读全文
                    posted @ 
2014-08-28 22:31 
acphile
        
阅读(217) 
         
        推荐(0)     
                 
                
                
    bzoj1072
    
                
摘要:还是那句话s0 do12 begin13 dec(tot);14 fillchar(s,sizeof(s),0);15 t:=0;16 read(ch);17 while ch' ' do18 begin19 x:=ord(ch)-48;20 inc(t);21...
        
阅读全文
                    posted @ 
2014-08-28 22:03 
acphile
        
阅读(130) 
         
        推荐(0)     
                 
                
                
    bzoj1787
    
                
摘要:首先考虑两个点的最优集合点,必然是在这两点间最短路径上三个点的最优集合点,不难猜测,是在两两之间的LCA上取,那到底取哪个呢?有一个偷懒的思维方法由于最后的最优集合点唯一,如果有两个LCA相等,则一定是另外一个当然事实也是这样选定了集合点之后,设选的是a,b的LCA,ab到集合点的距离在LCA中可以...
        
阅读全文
                    posted @ 
2014-08-21 22:02 
acphile
        
阅读(116) 
         
        推荐(0)     
                 
                
                
    bzoj1899
    
                
摘要:显然如果只有一个窗口,是一道贪心的题目,直接让吃饭慢的排在前面即可两个窗口的话,我们还是根据这个原则先对吃饭时间降序排序,然后这是一个dp假如设当前处理到第i个人,当在窗口1的打饭时间确定了,窗口2的打饭时间也就知道了我们用f[i,j]表示到第i个人,窗口1的打饭时间为j时的最快集合时间然后dp搞一...
        
阅读全文
                    posted @ 
2014-08-21 20:50 
acphile
        
阅读(200) 
         
        推荐(0)     
                 
                
                
    bzoj1406
    
                
摘要:这道题很有意思我们解过线性同余方程,也解过同余方程这个则是求x^2≡1 (mod p)可以将问题转化为(x-1)(x+1)≡0 (mod p)然后我们穷举一下p的约数i,看i|x-1,p/i|x+1 或者i|x+1, p/i|x-1是否可行解然后排序去重即可 1 var ans:array[0..1...
        
阅读全文
                    posted @ 
2014-08-21 20:39 
acphile
        
阅读(136) 
         
        推荐(0)     
                 
                
                
    bzoj3238
    
                
摘要:都LCP了很显然是要用到后缀数组的显然前面的那个东西是可以直接算出来的关键在于LCP的和怎么快速的计算不难想到穷举height[i],然后判断这个height[i]可能成为多少对后缀的LCP考虑到LCP(i,j)=min(height[rank[i]+1~rank[j]]) 假定rank[i]k) ...
        
阅读全文
                    posted @ 
2014-08-21 19:57 
acphile
        
阅读(156) 
         
        推荐(0)     
                 
                
                
    bzoj1264
    
                
摘要:表面上看这是一道LCS问题LCS问题O(n2)的复杂度已经很优秀了而这道题需要O(nlogn)以下的复杂度才能AC所以我们要找经典问题的特殊性特殊就在这两个串中,每个数字都是恰好出现5次不难想到先预处理每个数在B串依次出现的位置先扫一遍A串,对于每一个数a[i],设f[j]=LCS(i,j)显然这个...
        
阅读全文
                    posted @ 
2014-08-21 15:27 
acphile
        
阅读(120) 
         
        推荐(0)     
                 
                
                
    bzoj1597
    
                
摘要:首先不难想到排序,这种无规律的东西一般都要转化为有规律才好做 首先以x为第一关键字,y为第二关键字升序排序 拍完序我们发现,若存在两块土地i,j x[i]<=x[j],y[i]<=y[j],那么土地i的购买一定可以忽略(因为价格是由x,y的乘积决定的) 剔除掉不需考虑的土地,不难发现剩下的土地x是升
        
阅读全文
                    posted @ 
2014-08-21 15:13 
acphile
        
阅读(137) 
         
        推荐(0)     
                 
                
                
    bzoj1034
    
                
摘要:贪心尽可能让最强的赢,最弱的赢,都不行则最弱打最强感性的想,我肯定要尽可能的赢,而且赢的要对等实在不能赢就拿最小的拼,所谓的田忌赛马策略由于总分一定,己方最差即己方最好时对方的分数 1 type list=array[0..100010] of longint; 2 var a,b:list; 3 ...
        
阅读全文
                    posted @ 
2014-08-13 21:57 
acphile
        
阅读(129) 
         
        推荐(0)     
                 
                
                
    poj2154
    
                
摘要:利用bzoj2705的结论我们很容易优化这道等价类计数的问题sum(n^gcd(i,n))/n mod p (10 do10 begin11 inc(j);12 b[j]:=x mod 2;13 x:=x shr 1;14 end;15 quick:=1;16 fo...
        
阅读全文
                    posted @ 
2014-08-13 21:45 
acphile
        
阅读(159) 
         
        推荐(0)     
                 
                
                
    bzoj2705
    
                
摘要:一个常用的结论(方法)只要知道gcd(i,n)=L 的i的个数s,我们就能很轻易得出答案gcd(i,n)=Lgcd(i/L,n/L)=1 不难得到这样的s=与n/L互质的个数=phi(n/L)一个数的欧拉函数最坏情况是可以在O(sqrt(n))的复杂度中弄出来的我们可以穷举L,只要从1穷举到根号n即...
        
阅读全文
                    posted @ 
2014-08-13 21:37 
acphile
        
阅读(122) 
         
        推荐(0)     
                 
                
                
    bzoj1458
    
                
摘要:题做多的话不难想到可能是以行列作为二分图两个点集,然后网络流相关具体怎么弄呢我们可以用求补集的思想,假设有解我们先把棋盘能放的地方放满士兵,然后我们尽量的把士兵拿走并且要满足行和列的要求,说到这方法就很明显了ans=n*m-障碍数-最大流我们用x[i]表示棋盘放满后第i行最多能移开的士兵数y[i]表...
        
阅读全文
                    posted @ 
2014-08-13 21:31 
acphile
        
阅读(143) 
         
        推荐(0)     
                 
                
                
    bzoj1927
    
                
摘要:看到这道题不难想到费用流吧,但是怎么做呢?一开始看到“每个点都恰好走一次”,我首先想到的有下界最小费用流,然后发现这没有满足最大流的条件,然后又连边松弛掉多余的流为了按照可行流的做法先减减去极大再加上极大,我又开了int64最后弄啊弄,AC了倒是,但是跑出了一个很恶心的14s+,感觉不是这样做,仔细...
        
阅读全文
                    posted @ 
2014-08-13 21:24 
acphile
        
阅读(303) 
         
        推荐(0)     
                 
                
                
    bzoj2242
    
                
摘要:快速幂 扩展欧几里得 baby-step-giant-step 可以自行baidu 程序附部分注释 1 const key=1000007; 2 type link=^node; 3 node=record 4 re,wh:longint; 5 next:link; 6 end; 7 8 var h
        
阅读全文
                    posted @ 
2014-08-12 20:16 
acphile
        
阅读(174) 
         
        推荐(0)     
                 
                
                
    水题列表
    
                
摘要:bzoj1230 简单的线段树没什么好说的bzoj1806 简单的dpbzoj1833 简单的数位dpbzoj1968 省选水题bzoj2241 穷举水题bzoj1218 感觉不能再水bzoj1789 只能更水bzoj1800 还是很水poj2356 巧妙的抽屉原理poj1006 中国剩余定理,其...
        
阅读全文
                    posted @ 
2014-08-12 20:05 
acphile
        
阅读(102) 
         
        推荐(0)     
                 
                
                
    bzoj2342
    
                
摘要:shoi题目好坑爹首先自己测发现这道题如果用后缀数组+rmq处理每个点回文串能延伸长度的话会TLE(当然我用的是倍增+ST的方法,如果用三分构建后缀数组+笛卡尔树处理rmq我就不知道了);关于最长回文子串的问题有一个更快的算法叫manacher,实现简单也好理解这个算法的优点在于它在每两个字符之间插...
        
阅读全文
                    posted @ 
2014-08-12 20:03 
acphile
        
阅读(276) 
         
        推荐(0)     
                 
                
                
    bzoj1231
    
                
摘要:看到n0) then17 begin18 for k:=0 to n-1 do19 if (i and (1 shl k)=0) and (abs(a[j]-a[k])>t) then20 inc(f[i or (1 shl k),k],f[i,j]);21 ...
        
阅读全文
                    posted @ 
2014-08-12 18:01 
acphile
        
阅读(213) 
         
        推荐(1)     
                 
                
                
    bzoj1232
    
                
摘要:由题意知,最后要保留的边肯定都要被走过来回一条边所花费的时间=2*边长+安慰边两端的牛所要花的时间和总时间就等于所保留边来回的时间和+根节点时间;不难想到做一下最小生成树即可贪心可知,根一定选在需要安慰时间最小的那个点 1 type node=record 2 x,y,len:longint;...
        
阅读全文
                    posted @ 
2014-08-12 17:54 
acphile
        
阅读(119) 
         
        推荐(0)     
                 
                
                
    bzoj1179
    
                
摘要:这种tarjan+dp的水题我竟然还WA了两次,要小心! 1 type link=^node; 2 node=record 3 po:longint; 4 next:link; 5 end; 6 7 var rd,be,st,v,a,dp,dfn,low:arra...
        
阅读全文
                    posted @ 
2014-08-04 16:48 
acphile
        
阅读(211) 
         
        推荐(0)     
                 
                
                
    bzoj1055
    
                
摘要:不难想到是一个布尔型dp,不难想到用f[i,j,k]表示区间[i,j]能否变为字母k不难想到对于f[i,j,k],拆[i,j]成两个区间,然后穷举k的每一个变换来判断感觉记忆化搜索写的比较顺,就写了记忆化 1 const a:array[1..4] of char=('W','I','N','G')...
        
阅读全文
                    posted @ 
2014-08-04 16:45 
acphile
        
阅读(124) 
         
        推荐(0)     
                 
                
                
    bzoj1042
    
                
摘要:首先直接做多重背包肯定会TLE的,观察这个背包问题有什么特殊性呢物品种类和重量,价值是一定的,不同的是背包的容量和物品的数量由于当物品数量没有限制的时候,方案数是可以预处理出来的所以我们考虑用ans=物品数量没有限制时的方案数-物品超出限制的方案数来解决第一部分是可以用完全背包来解决的第二问不难想到...
        
阅读全文
                    posted @ 
2014-08-04 16:36 
acphile
        
阅读(184) 
         
        推荐(0)     
                 
                
                
    bzoj1295
    
                
摘要:考虑到这道题n,m都很小,我们考虑先穷举起点i下面我们要做的是找出移走k个障碍后,点i所能到的最大距离我们可以把这个问题转化为判定性问题对于一对点i,j,如果他们之间存在一条路径,障碍数(包括起点终点)小于k,那么这两个点的点间距就是可行间距也就是说,我们对于每个起点,我们只要做一遍最短路径,然后穷...
        
阅读全文
                    posted @ 
2014-08-04 16:21 
acphile
        
阅读(123) 
         
        推荐(0)     
                 
                
                
    bzoj1263
    
                
摘要:观察可得,最大的拆分方法是尽量拆成3,特殊的,如果最后剩下了1,那么就把3+1变成2+2然后高精度计算即可 1 var s2,s3,i,n,l:longint; 2 a:array[0..5010] of longint; 3 4 procedure mul(x,m:longint); 5 ...
        
阅读全文
                    posted @ 
2014-08-04 16:13 
acphile
        
阅读(141) 
         
        推荐(0)     
                 
                
                
    bzoj1237
    
                
摘要:假如不存在相等的两个数不能配对,那很容易贪心得到,A中rank 1匹配B中rank 1A中rank2 匹配B中rank 2……有了相等不能匹配这个条件,那么A中rank i可能和rank i,i-1,i+1匹配也有可能三对数字交换匹配dp一下就好了 1 const inf=2000010; 2 ty...
        
阅读全文
                    posted @ 
2014-08-04 16:09 
acphile
        
阅读(138) 
         
        推荐(0)     
                 
                
                
    bzoj1028
    
                
摘要:穷举水题 1 var v:array[0..410] of boolean; 2 q:array[0..3010] of longint; 3 ans,count,jud:array[0..1010] of longint; 4 x,i,j,n,m,tot,t,k:longint; 5 ...
        
阅读全文
                    posted @ 
2014-08-04 16:06 
acphile
        
阅读(150) 
         
        推荐(0)