zoukankan      html  css  js  c++  java
  • 7.9模拟赛赛后总结

    7.9模拟赛赛后总结

    早上等了很久还没发题。看了会儿交互(毕竟老师说今天要考)。

    九点十分,终于发下了题目,这个时候由于较长时间的放空,我有些困了。

    十点十分,脑子开始清醒了,开始能够思考了。思前想后,T1一直都感觉难,于是去看了T2。

    仔细一看,发现前30分非常水,于是赶紧码了码,稍微调了一下,用它的样例测试了一下感觉没问题了。

    这个时候是大概十一点,还有三个小时。

    思考了一番T3,想到了一个DP,大概是记录 (f[i][x]) 为走到 (i) 而代价是 (x) 的最大收益。然后分析了一会儿并且调试了一会儿,有了30分。这个时候大概过去了40分钟还是一个小时了,已经十二点了,有点饿。

    然后想了想 T1,还是不贪了,看起来这道题也不简单,搞到20分就好!然后码了一百多行的20分暴力,花了挺长的时间的(为什么二十分的暴力会这么长?)

    这个时候思考还能拿什么分,还有一个小时出头,现在大概是20+30+30,80分了,感觉T3的DP应该是最好搞的吧。那就想想这个,一般这种DP想优化到$O(n)$ 或者 (O(nlogn)) 那大概率是一维的状态以及单调性什么的,似乎可以设计两个状态 (f_i ,g_i) 分别表示 (i) 这个位置最大的收益以及对应的代价,然后这个转移可以拆开,然后这个拆开代价的代价可以放到set里边,然后考虑每次选先前的最大代价的,应该就是最大收益的了,嗯不错,那每次lowerbound代价然后取对应位置的贡献来更新当前状态,似乎就OK了?woc不会吧。直接把我原本想写的基础的$n^2$ (不用set维护而已,还是这个思路)给划掉,直接干正解了芜湖。

    10分钟写完,是不是过于轻松了?500的小样例测一发,对了,开始对拍。

    结果发现错了,似乎不能直接从最高的转移,那,从所有合适的代价来转移吧,相当于带优化的 (n^2) ,对拍了一会也没拍出来错误,那应该是对了吧,正好也快到点了,检查一波freopen就交了。

    赛后发现

    1 挂分了。本来想着105的,变成了60。挂在了T2的第二个sub,没有判长的前导0,T3的那个 (n^2) 写假了。

    2 T2 的第三个sub是延续着第二个sub的,不过对于没有发现长前导0的我,估计打了也会炸,虽然炸不炸,耽误不耽误时间都不会影响我后来T3写假就是了。

    3 冀队T1T3都A了,T2的三个sub也打满了 /fad 不说了,还是冀队神啊。

    技术总结

    T1

    感觉T1就是个大水题 ——zwj

    T1考虑把图分成树和其它部分,对两张图分别进行黑白染色(给01),如果都能染色成功,那么把第一张图的颜色x2(即变为0,2),然后把两个图的颜色编号加起来,就能够不冲突的产生一个四染色的状态;如果不能染色成功,那一定是剩余的部分存在奇环,那么把这个奇环给输出就好。

    T2

    正解的话,a=57,b=50,同样是分组,把两个数分成一组,每次对一组询问 ({0...1,10^{49}...0}),这样能够准确得到第一个数的最后49位,对于前8位就会和第二个数重合,但是只要知道第二个数的后八位即可作差得到这前8位,那么考虑再问一次${0,108,0,10{16}...}$ 这样就能提取出每组第二个的后8位,不过看到总共有 (8) 组,所以说最后指数会超过 (50) ,再分一次组就好了,这样整好 (10) 次询问就好了。

    T3

    正解是另一个DP,设 (f[i][j])(1)~(i-1) 个店铺不选,收益为 (j) 的最小代价。这种把要求的东西作为状态,附加的东西作为属性的DP思路似乎是头一回见,长见识了。。 然后,考虑转移 (f[i][j]=min(f[i+1][j-a[i]]+a[i]*i,f[i+1][j])) ,这个转移是比较好理解的,就是这次如果选了这个店,那么代价就要加上 (a[i]*i) ,对于 (f[i][a[i]]) 它的代价一定是 (a[i]+2*i) ,显然这个东西可以滚动来求。

    转移是倒着转移,然后考虑每次的转移,暴力转移的话肯定是 (O(nm)) 的,但是有一点考虑就能A掉,一般这种东西都只能在第二维动手脚,考虑后边已经选择的 (k) ,它们贡献的代价是 (sum a[k]*k) 我们知道 (i<k) ,那么 (sum a[k]*i) 一定小于这个值,也就是说,考虑的前边的收益就是 (j=sum a[k]) ,代价$sum a[k]k $ 需要小于 (X) ,所以考虑收益 (j) ,那么如果$j$ 满足$ijle X$ 的话,那前面已经考虑过的合法收益一定是都被枚举到了,所以每次枚举第二维只需要到 (m/i) 即可,第二维的期望复杂度是 (logX) 的。

  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/mikuo/p/14992667.html
Copyright © 2011-2022 走看看