模拟测试20190802

日常爆炸,rp++

考试的时候三道题都只会打暴力,T1打完线段树又删了,T2,dfs然而并没有分,T3本来40分的暴力被我浪到了36(别老想着骗分)

总分40+0+36=76pts,rank36,原地爆炸

主要考试的时候不能静下心思考,对问题总是想偏,一出问题就自暴自弃,最后出成绩直接完戏

T1:string

暴力十分好打,全场除了W某没有一个爆零

正解和之前一道题一样用线段树维护区间查询和赋值

然而由于改题时没开26棵线段树而只开了一棵,凭空从26变成26^2,各种极限卡长,循环展开,fread才过。。。。。。

T2:matrix

考场上纯暴力0pts,状压20pts,dp100pts

设f[i][j]表示前i列已经在j个右区间放了1,然后分这样几种情况讨论

(设ls[i]表示i及i左侧左区间右端点的个数,rs[i]表示i及i左侧右区间左端电的个数)

1:什么也不填,则f[i+1][j]+=f[i][j]

2:在下一列填1,那么有r[i+1]-j种填法,则f[i+1][j+1]+=f[i][j]*(r[i+1]-j)

但到现在我们只考虑了右区间的填法,而对于左区间的填法,在第i列我们需要安排l[i]-l[i-1]个1,同时有i-j-l[i-1]个空行,则f[i][j]*=A(i-j-l[i-1],l[i]-l[i-1])

T3:big

考场上本来40分暴力,后来想偏分码了个神奇算法,成功卡掉自己4分,rp++

题义可转化成选一个数,使他和m-1个数异或最小值最大

把m-1个数插入trie,从根开始dfs,使结果最大就好了

(一定要从高位往低位插入)

原文地址:https://www.cnblogs.com/mikufun-hzoi-cpp/p/11286579.html