2017.8.12 总结

来源:互联网 发布:mac winebottler 1.8 编辑:程序博客网 时间:2024/06/05 09:47

今天早上的模拟赛....还算简单....至少我还有三位数的成绩(大雾)QwQ。

T1的题意是给你一个字符串,由‘Z’,'W','B'组成,分别表示主语,谓语宾语,问你能不能组成一句或多句完整的句子(一句完整的句子包含一个主语,一个宾语,一个谓语)。在这些句子里面有可能包含主语从句和宾语从句,主语从句与宾语从句也分别由'Z','W',B'组成,若不能组成完整的句子(即为有毛病),则输出Yes,若可以,则输出No,并输出一共包含了几个从句。(字符串长度<=100000,数据组数<=100)

思路:这题直接扫一遍用一个栈模拟一下就行了,若碰到有连续的ZWB,若Z前是W,则应将ZWB替换成B再次压入栈中,否则替换成Z。若替换完再次出现,则继续替换,直到不再出现连续的ZWB为止。扫完之后判断一下栈中保存的是否只有Z了,如果还有剩下其他字母,则输出Yes就行了,否则就是No。

T2就是给你一个金字塔的层数n和k个矩形,并给你金字塔每层的左右端点x,y.且这个金字塔的上一层的x大于等于下一层的x,上一层的y小于等于下一层的y。问你用这k个矩形最大能覆盖多大的面积。(n<=20000,k<=100,x,y<=1e9)

思路:比赛时我就写了个n^2*k的暴力DP,拿了80分,F[i][j]表示前i层用了j个矩形的最大覆盖面积,在转移时分两种情况,一种是这个矩形是横着覆盖一行放过去,这种可以直接从F[i-1][j-1]转移过来;还有一种情况是这个矩形是覆盖多行的情况,这种我是用了一个for循环枚举覆盖几层,又因为金字塔随着高度上升宽度单调不递增,所以只用取i层的宽度就行了,对这两种情况取个max就是F[i][j]的答案。最后输出F[n][k]。

题解:在DP时我们可以看出,金字塔宽度是单调不增的,所以可以考虑斜率优化。用斜率优化瞎搞搞,去掉一些显然用不到的决策就可以了(雾)。

T3简化题意就是给你一个n,m,让你求小于等于m的n个位置的排列,使这n个数与m的最大公约数为1,求方案数mod1e9+7.(n,m<=1e15)

思路:由于这题范围很大,显然不能考虑暴力去做,所以我想到了容斥,即将所有的m的因数通过容斥求出小于等于m的数中有多少与m的最大公约数不为1的,记为res个。最后用m^n-res^n就行了,但是我不知道哪里写挂了只拿了60分...其实应该是满分做法的QAQ。。

原创粉丝点击