2016.08.14【初中部 NOIP提高组 】模拟赛C小结

来源:互联网 发布:怎么做数据分析表 编辑:程序博客网 时间:2024/05/27 01:47

这一次的比赛吗,只有145分,17名,对于习惯待在普及组的我来说已经是正常水平了,正经做题不过一个半小时,主要是我肚子不舒服,在厕所蹲了总共1小时,做了第1题后,其他题我又没有思路了,只好看书,最后30分钟才想出第二题的思路,草草的改了一下,45分,时间超限和答案错误,我也不想啊,这么短时间怎么想得出正解,其实,我再加2个优化就行了,      

 T1:文文的照相机可不止能够照相,还能够消除取景框里面所有的弹幕。假设现在文文面前有一块N行M列的弹幕群,每一个单位面积内有分值有num[i][j]的弹幕。相机的取景框可以将一块R行C列的弹幕消除,并且得到这一块区域内所有弹幕的分值(累加)。现在文文想要取得尽可能多的分值,请你计算出她最多能够得到的分值。

思路:设f[i,j]为以i行j列为矩形的右下角的得分值,毕竟只有一种情况,f[i,j]=f[i-1,j-1],不过要改变,加上底边右下角的一层,减去边界左上角的一层,

h[i,j]表示第i行,1~j列的得分值和,l[i.j]表示第j列,1~i行的得分值和,伪代码:

 for i:=1 to n do        begin                for j:=1 to m do                begin                        read(num[i,j]);                        h[i,j]:=h[i,j-1]+num[i,j];//求h[i,j]                        l[i,j]:=l[i-1,j]+num[i,j];//求l[i,j]                end;        end;        for i:=1 to n do        begin                for j:=1 to m  do                begin                        f[i,j]:=f[i-1,j-1]//旧矩阵                        +(h[i,j]-h[i,j-c])//新加的行                        +(l[i-1,j]-l[i-r,j])//新加的列                        -(l[i-1,j-c]-l[i-r,j-c])//删掉旧矩阵边界的列                        -(h[i-r,j-1]-h[i-r,j-c])//删掉旧矩阵边界的行                        -num[i-r,j-c];//删掉旧矩阵的左上角                        if f[i,j]>zx then zx:=f[i,j];//求最大值                end;        end;
T2:我们考虑从’A’到’Z’分别表示0到25的数字,于是这个魔法咒语就可以看作一个26进制数。帕秋莉通过研究发现,如果一个魔法咒语所代表的数能够整除10进制数M的话,就能够发挥最大的威力。若当前的魔法咒语并不能整除M,帕秋莉只会将其中两个字符的位置交换,尽量让它能够被M整除,当然由于某些咒语比较特殊,无论怎么改变都不能达到这个目的。请你计算出她能否只交换两个字符就让当前咒语被M整除。(首位的’A’为前导0)
思路:求出每一个位的进制,然后用sum累加这个咒语的数(PS:所有都要mod m),如果sum=0就说明这个咒语可以被整除,否则,两两枚举要交换的位置,继续计算(不用循环,加加减减就行)伪代码:
 for i:=2 to l do  a[i]:=(a[i-1]*26)mod m;//进制        for i:=l downto 1 do        begin                zx:=(zx+fx[s[i]]*a[l-i+1])mod m;//求初始值        end;        if zx=0 then        begin                writeln('0 0');//如果能直接被整除                halt;        end;        for i:=1 to l-1 do        begin                for j:=i+1 to l do //两两枚举要交换的位置                begin                        ans:=(zx+(fx[s[i]]*a[l-j+1])+(fx[s[j]]*a[l-i+1])                        -(fx[s[i]]*a[l-i+1])-(fx[s[j]]*a[l-j+1]))mod m;//交换后的值                        if ans=0 then //如果能被整除                        begin                                writeln(i,' ',j);                                halt;                        end;                end;        end;        writeln('-1 -1');//无法被整除
T3  在幻想乡,雾雨魔理沙是住在魔法之森普通的黑魔法少女。话说最近魔理沙从香霖堂拿到了升级过后的的迷你八卦炉,她迫不及待地希望试试八卦炉的威力。在一个二维平面上有许多毛玉(一种飞行生物,可以视为点),每个毛玉具有两个属性,分值value和倍率mul。八卦炉发射出的魔法炮是一条无限长的直线形区域,可以视为两条倾斜角为α的平行线之间的区域,平行线之间的距离可以为任意值,如下图所示:
  
  蓝色部分上下两条长边之间就是这次八卦炉的攻击范围,在蓝色范围内的毛玉(红点)属于该此被击中的毛玉,如果一个毛玉刚好在边界上也视为被击中。毛玉击中以后就会消失,每次发射八卦炉得到分值是该次击中毛玉的分值和乘上这些毛玉平均的倍率,设该次击中的毛玉集合为S,则分值计算公式为:
  Score = SUM{value[i] | i 属于 S} * SUM{mul[i] | i 属于 S} / |S|
  其中|S|表示S的元素个数。魔理沙将会使用若干次八卦炉,直到把所有毛玉全部击中。任意两次攻击的范围均不重叠。最后得到的分值为每次攻击分值之和。现在请你计算出能够得到的最大分值。
思路:努力做ing,求题解
T4: 在幻想乡,伊吹萃香是能够控制物体密度的鬼王。因为能够控制密度,所以萃香能够制造白洞和黑洞,并可以随时改变它们。某一天萃香闲着无聊,在妖怪之山上设置了一些白洞或黑洞,由于引力的影响,给妖怪们带来了很大的麻烦。于是他们决定找出一条消耗体力最少的路,来方便进出。已知妖怪之山上有N个路口(编号1..N),每个路口都被萃香设置了一定质量白洞或者黑洞。原本在各个路口之间有M条单向路,走过每一条路需要消耗一定量的体力以及1个单位的时间。由于白洞和黑洞的存在,走过每条路需要消耗的体力也就产生了变化,假设一条道路两端路口黑白洞的质量差为delta:
  1. 从有白洞的路口走向有黑洞的路口,消耗的体力值减少delta,若该条路径消耗的体力值变为负数的话,取为0。
  2. 从有黑洞的路口走向有白洞的路口,消耗的体力值增加delta。
  3. 如果路口两端均为白洞或黑洞,消耗的体力值无变化。
  由于光是放置黑洞白洞不足以体现萃香的强大,所以她决定每过1个单位时间,就把所有路口的白洞改成黑洞,黑洞改成白洞。当然在走的过程中你可以选择在一个路口上停留1个单位的时间,如果当前路口为白洞,则不消耗体力,否则消耗s[i]的体力。现在请你计算从路口1走到路口N最小的体力消耗。保证一定存在道路从路口1到路口N。
思路:单源最短路径,不会,求题解

       
0 0
原创粉丝点击