随笔分类 - NOIP
every year's noip problems
摘要:一道答题解法一定细节解法并不怎么确定的题目,总体上就是搜索了。在每层当前可被感染的人中,只能选一个人,就先DFS建树,统计每一层的人,保存在一个表里,再进行搜索,一个人被控制后,就用递归把他的儿子全部赋值成不能染病,并在可染病人数中减去该子树大小,取最小值即可。统计官方上都说要剪枝,但是我的程序最大点0.2S。View Code 1 program noip2003t4(input,output); 2 type 3 node=^link; 4 link=record 5 goal:longint; 6 next:node; ...
阅读全文
摘要:题意抽象出来就是求(cell[i])^k mod m1^m2=0的最小的k值。把m1^m2分解质因数即可,再把每一个细胞数分解,对比其质因子数量,对于某个因子,m1^m2次有而后者没有,那么这种情况一定无解,继续枚举下一个细胞数即可,而两者都有时,就是要最少的后者的因子凑出大于等于后者因子的最小次幂,处理完每一个因子后取因子需要的最大值,用它去更新答案。注意m1=1时的特殊情况。View Code 1 program tyvj1105(input,output); 2 var 3 v : array[2..50000] of boolean; 4 prime...
阅读全文
摘要:第一题,能量项链,比较经典的合并类动态规划,个人认为最简明的方程是f[i,j]=Max{f[i,j],f[i,k]+f[k+1,j]+a[i]*a[k+1]*a[j]},但这样写的话动归的循环没有办法实现,为了思维的简明,本人义无反顾的写下了记忆化搜索,效率没什么损失,都是0.01s出解,从这道题里也可以总结出一些什么,比如状态的分部规则性不明显时或者想出了动态方程但循环边界却十分纠结,记忆化搜索也是不错的选择,当然有些题目可以运用类似广度优先搜索的记忆化,属于正推,也有深搜的记忆化,其实它们本质上没有什么区别,都是状态的一些整合而已,动态规划题目并不难,看清实质就能行。View Code .
阅读全文
摘要:第一题,数字统计,很water的题目,要是有人傻乎乎的用桶排,我也没办法,直接上代码。View Code 1 Program Count(Input,Output); 2 Type 3 Numbertype = Array[0..200000] Of Longint; 4 Var 5 N1,I1,S : Longint; 6 A : Numbertype; 7 Procedure Swap(Var A1,A2: Longint); 8 Var 9 T:Longint;10 Begin11 T:=A1;12 A1:=A2;13 A2:=T;...
阅读全文
摘要:一.潜伏者(有一一对应的特殊错误关系,可用代码中二重循环判断)View Code 1 program spy(input,output); 2 var a:array['A'..'Z'] of char; 3 i,j:longint; 4 s1,s2,s3:ansistring; 5 ch:char; 6 begin 7 assign(input,'spy.in');reset(input); 8 assign(output,'spy.out');rewrite(output); 9 fillchar(a,sizeof(a),&#
阅读全文
摘要:一.机器翻译View Code 1 program translate(input,output); 2 var 3 q : array[0..10001] of longint; 4 v : array[0..1000] of boolean; 5 head,tail : longint; 6 n,m,ans,i,x : longint; 7 begin 8 assign(input,'translate.in');reset(input); 9 assign(output,'translate.out');r...
阅读全文