2016.9.17初中部下午NOIP普及组比赛总结
2016.9.17初中部下午NOIP普及组比赛总结
2016.09.17【初中部 NOIP普及组 】模拟赛
最近几次的题目都不是自己擅长的啊。。。
不过含金量挺高的,也好。。。
进度:
比赛:0+0+10+55=65;
改题:AC+0+AC+100=300
一、打印序列
这次比赛告诉我一个道理:如果比赛时遇到模拟题,就惨了。
因为我模拟题总是错的,而别人很擅长。
题目简化:
一串数列,有两项操作
1.如果第一个是数列中最大或并列最大的就把它取出
2.如果不是则把它放最后。
问那个人的文件何时取出。
考试思路:
用了个像一个队列一样的东西,有头尾指针i和j。
有一个看看自己的有没有取出的文件的位置m
如果是情况1,那么直接取出来,i++,time++(我没编c++只是赶时间而已)
判断是否已取自己的文件。
否则,j++,a[j]:=a[i],i++。
如果移的正是自己的,m:=j
不然不变。
错因:
m是重点,可是在换位时变错了。
我在其他数换位时m–,删掉就对了。
还有,陷入死循环,和d数组爆了
正解:
我的方法已经是正解了。
讲讲郑少怀小同学的方法: 也是像上面一样判断,可是操作有点特别。
这没有头尾指针,移到后面去后用for把所有的补空(话说不会爆吗?)
删掉前面的也是补空。
用bz数组来标记一下哪个格为自己的(话说自己的只有一个,费这么多空间干嘛?)
也是用for移。。。
(刚来的就爱这样。。。) (只能怪纪中数据水。。。)
二、Candy 出去玩
考试时不懂意思啊!!
题目简化:
有点晕,但知道大概意思。
如果a[i]>a[j],b[i]>b[j]就证明i比j好。
然后分组分组。。。
上面的都要比下面的差
好像就是这样。。。
正解:
吴大神的方法:
先以a为1关键字,b为2关键字排序。
然后就很好分了。
三、闯王的宝藏
其实有用的就几句话。
我审题错了,把n为看成是这个数是n。
题目简化:
一个数(也可以说是一个长串),
去掉某些数位之后的最小值。
考试思路:
审题错误,以为输入的那个数是n。N<=5000000
然后算了算时间复杂度,
发现爆搜能过!OWO
兴奋地打了爆搜(枚举位数,并去掉)。
错因:
审题错误。
看到那血红血红的运行时错误10分,
猛地发现小小的longint容纳不下。
正解:
如果后面的比前面的小,就删前面的。
注意不能用字符串,会80。邓神说,那要一位一位向前挪。
要用数组模拟链表(好像是这个)。
last数组存放之前的。
next数组存放之后的。
删东西时只需变一下next和last就好了(机智!)
原来以为要
type
pxian=^xian;
xian=record
next:pxian;
...
end;
如果真这样就好玩了。
四、稀有逛超市
审题错误(即使我没审错题,也能错)
逆天之题。
题目简化:
1:01背包
2:完全背包
其他:这类当中只选一个(比如两个3类,只能选其中一个)
最大值。
考试思路:
直接01和完全。
干脆把
1变成01背包。
2变成完全背包。
其他的就不管啦!
错因:
因为没管其他的呀!
正解:
因为这题有些逆天,所以我们把它分成两部分:01和完全,分组只选一的。
具体解法:
首先看看这里的第三题优化一
你会发现这类型和那里的分组差不多,
只是为了证明是同一组而已。但有些组是空的。
所以这可以省掉一些时间。
还要把2以上的类型删掉,存到另外的地方。
然后做01和完全(当然要一维)
接下来是重点:
f2=f;
k=1–>不含1,2种类个数
{
j=1–>这个种类的物品个数
i=n<–这物品的重量
转移方程不变(f改f2,但是max的第二个参数要改为f)
f[i]:=max(f[i],f2[i]) 1<=i<=n
}
输出f[n]
(很水是不是?)
题外话:
1.模拟题其实不难,只不过有很多奇怪的细节。
2.字符串很慢。
3.我发现越来越少人打总结了。
4.最近几次的题目总不是很擅长。