今天考了一场COCI的比赛,感觉题目没考什么特别难的算法,但是有些题就实现很麻烦。
第一题键盘打字,就是个打表题,打了我好大半天,还好没打错。
第二题一群固执的老人看电视,模拟一下谁去换台,换了什么台就可以过了,注意有循环就输出-1
第三题building,一道卡格式的题,给出每个矩形的左下角右上角坐标,让你勾勒整个透视图的轮廓。我想的是从外围跑一次flood fill,能够接触到的矩形的边就是要画出来的了。然后输出的时候注意下标迭代的顺序。这么一道无聊的题花了我好大半天时间,写了100行才写完。
第四题ranking,就是绑定矩形前缀和,然后利用矩形割补法求一下这个人能“完虐”多少人,多少人能“完虐“他,其他的人总是存在合理的安排顺序的,然后注意一下细节就行了。
第五题堆栈,比较有意思,所有的操作要么是复制一个之前出现过的堆栈,然后把当前操作id放在栈顶,要么复制一个之前的堆栈,然后pop,要么比较两个堆栈有几个公共元素。首先明确模拟肯定没法做,因为每一次复制都会增加O(n)的内存,内存很容易就崩了。模拟一下样例就会发现栈里的元素都是递增的,那么建一棵trie树,把每一操作后新产