| 好久没碰ACM了,前段时间一直在搞电子大赛,昨天把上一场大连5道简单的题水了一下,今天睡到中午,跑到大黑屋,直接就开搞了- - | 说起来今天状态不错,过了3道题目,总共我们过了5道,学校排名34,算起来是相当不错的成绩了- - |
今天前几十分钟风平浪静的,没有那种瞬A的题目,终于陆陆续续有一些零星A了题的,浏览了一下题目,发现1002比较简单,果断开始写。一开始题目理解错了,理解成只要输出总共的数量,码完代码之后发现不对,仔细看了一下题目,理解到每扔一次炸弹都要输出一次解,看了一下数据范围感觉用stl应该能够过,于是果断用map水了一下,大概就是x开一个map,map的index是x坐标,val是对应的碉堡的index,y同理,然后扔炸弹的时候从map里面把对应的碉堡都删了,顺便把新删掉的点做个标记,嗷……A了- -
| 这时候JJ在做1007了,听说那道题是线段树什么的,最近没刷题,这方面没手感,果断不管,看其他题,这时候听他们说了一下4028的题意,大概意思就是给定一个n(1<=n<=40),和一个k,求n中取任意个数之后最小公倍数大于等于k的情况总数。感觉这题目应该不至于太难,一开始想到了打表,一开始想岔了,以为最小公倍数是同一个数的时候算是同一种情况,于是把1到40分解之后搞表什么的,写了一半发现情况不对,仔细理了一下思路,还是打表,但是这个表生成起来还是挺麻烦的- - | 于是这时候给zsm说了一下思路,说着说着豁然开朗,直接用dp来生成那个表格就OK了。于是开始写,刚开始写的时候没有考虑清楚范围,后来发现范围不对,没法用数组dp,改成用map,话说这会儿我考虑到公倍数结果可能超出int的范围,但是没有考虑到答案也会超出map,果断各种悲剧- -写完之后发现小数据过了,直接提交,发现不对,本地debug了一下,发现大数据输出是-1,显然是超界了,于是把记录方案数的部分也改成long long,果断A了。 |
再然后看了一下,发现1跟3过的人有点多,看了一下3的意思,感觉能够用贪心水过去,于是就写了个莫名其妙的贪心策略,然后纯模拟了一下,因为数据比较小,也没考虑时间复杂度,直接上multiset,贪心策略挺简单的。
对于前两种情况,直接加到各自的计数器上面,因为是独占的
| 然后剩下13种情况,分别求出A先手跟B先手的两种收益情况,然后把两个收益的和当做这个方块的权值,贪心时候按照A先手的顺序,每个人都去取权值比较大的方块,取了之后在自己的计数器上面对应加上自己的收益,然后对比两个计数器,如果A的计数器比B大就说明A赢,B的计数器比较大就B赢……感觉也没什么证明之类的- - | 但是偏偏就是A了……这道题目也犯了个小错误,一开始在往计数器上面加东西的时候加的是某个方块的权值,而不是加的对应的收益,导致结果不对…… |
之后的时间一直在折腾1001,说起来1001过的人是第二多的,我一直感觉应该用类似八数码的逆序数能够搞定,不过一直到最后都没有A……
总体来看今天状态挺不错的,过了三题目,但是几乎每一道题目都是一开始看错,写了一大半发现有问题,于是推翻重写……
现场赛如果出现这种情况果断是个悲剧啊……