T1 gift
这个题是一个网络流,有65分比较裸的01分数规划,但是有一个恶心的限制就是最后的答案向下取整,有一个比较巧妙的做法就是先整数二分,然后用得到的ans+1-eps在进行一次实数二分,这样就可以避免=0的情况,而且避免了极其满的实数二分 不过正解貌似并没有考虑取整这个麻烦事
正解的话就是优化建图,可以把图中的点数优化到O(n)的
就是先考虑如果我们选出一些点集,那么它们中间的边就一定会选,那么我们就可以设一个与点i相连的边权和是deg[i],然后设cut是把两个集合分开的边权和那么最终的答案就是 (deg[i]-cut)/(2*a[i]). 然后01分数规划一下,在移项变号就可以得到-deg[i]+cut+2*ga[i]<=0,然后观察一下式子就可以发现,这个其实就是一个最小割的模型,也就是选择i就会付出2*ga[i]-deg[i]的代价,然后边就直接割掉就好了,但是我们发现可能会有负的边权,有两个解决的不阿发,一个就是把边权拆一下,分别向S,T连边,也可以就是可所有的边权加一个足够大U,然后S也向每一个点连一个U的边,这样保证最后加的U肯定肯定会被割掉一个,然后dinic完了之后在减一个n*U就好了。。。。。。
T2 dungeon
这个题 计算几何啊
就是用向量表示直线,然后将点带入,然后根据一些对称性列出一些方程,就可以解出每次弹完后的方向向量了
要注意的一点就是每次判撞那个球的时候,不能撞上一个球
T3 test
这个题开始一直是在怎么直接装压DP,但是后来我发现只是每次只用去掉一些奇数次的质因子,这个质因子的数量还是挺少的,但是面对200以内还是不能解决,然后我们发现,大于n/2的质因子一定会被删掉,那么我们就可以不DP它们,具体实现的话我是枚举每一个数,然后dfs. 还有更优的做法就是先把所有的数按照最小的质因子排序,然后这样我们在dfs的时候就可以跳着枚举了。
正解的话就是利用了一些思想,我们可以发现,我们可以把所有的质因子分成两类:大于sqrt(n)的和剩下的,分别叫做s,t,那么s中的质因数只能和t中的质因数组合形成一个新的数,s之间的质因数是不能互相组合的,那么我们就可以分两步分别DP,f1[i][j]表示考虑到第i个数,已经消掉了j这个这个集合中的质因子的方案数,然后在用f2[i][j]表示考虑到第i个大质因子,已经删掉了j这个集合中的小质因子的方案数,然后我们可以把需要的数字预处理出来,然后DP就好了
今天考试感觉T2一下就把我吓住啦,根本就没怎么敢打,但是其实后来想想运用我的高考知识列列方程应该也是能骗到40分的,感觉有点亏,然后就是T3的方向不对想了太久,还是要多换换角度