高中OJ 3794. 【NOIP2014模拟8.20】高级打字机

T3题解:

100分(总分200):

根据数据范围可以知道,100%的数据撤销操作不会撤掉之前的撤销操作。

所以撤销操作能撤掉的只有插入操作。而插入操作每次都是在最末尾,所以每次把后X个字母删掉就可以了。

 

180分:

设a[i]表示第i次出现的结果,每产生一个新的结果后,就把i的值增加1,把新出现的结果放到a[i]中。

从数据得知,UNDO操作是可以撤掉UNDO操作的。所以我们不能直接删字母。

因为UNDO是最后X次操作,所以如果遇到UNDO就把a[i]赋值为a[i-x-1]。

 

200分:

180分的方法会空间超限,所以我们要把空间压缩。

先普及一个知识:

在PASCAL中,string是字符数组,但ansistring是字符链表。

数组和链表的区别就在于一个数组的空间是固定的,但链表的空间和长度却是成正比。

在计算过程中会产生很多已经没有价值的字符链表,即不影响到最终结果,我们可以根据上面的性质把他们释放(即赋值为空)从而节省空间。

所以我们可以把距离当前第i个节点较远的节点删除,就可以AC了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值