为了给我们这些蒟蒻一点简(ju)单(nan)的考验,这段时间来了套联测(2017.11.6~2017.11.9)
DAY1-morning
蒟蒻世界:
T1:做的时候第一道题一开始没看清题意,后来发现其实就是求最少分成多少个段,使得每个段都呈不上升或不下降的序列,我做的时候,就想着,直接做嘛,先做差,然后就直接遍历一遍,一旦有不符合当前的不上升或不下降的话,ans++,结果只拿了90
T2:接下来打完就去打第二题了,就是给出一个环(环上的数为1到n),有两种操作,一种顺时针或逆时针旋转环,另一种是将第一位和第二位交换,第三位和第四位交换......一看范围就知道暴力肯定爆,只能拿30,但是肯定不能只拿这点分,就先打了个暴力留着用来对拍,然后想了想应该怎么做才能拿,就发现其实数列中的奇数的相对位置是不变的,偶数也具有这个性质,然后在草稿纸上一顿龙飞凤舞后,就得到一个类似正解的玩意儿:因为奇数之间和偶数之间的相对位置不变,所以每个数改变的相对位置与和它的奇偶性相同的数改变的相对位置相同,那么我们就用a,b来分别记录奇数和偶数位置改变的情况,p,q用来为交换操作做准备的,要记得,一旦奇数位置上有偶数时就要改变一下p和q,就这样AC了第二题(不过对拍搞了我好久)
T3:Alice 和 Bob 在一个二维平面上玩游戏,Alice先在(0,0)放一个棋子 (算作第一轮),接下来Bob,Alice 2人轮流操作放棋子,每个人放棋子时,对于任意坐标(x,y),若(x-2,y)有另一人的棋子,(x-1,y-1)没有,或者(x-1,y-1)有另一人的棋子,(x-2,y)没有,他就会在(x,y)放一枚他的棋子,每个人操作时会把所有他能放棋子的格子放满,一个格子最多放1个棋子。第三题没时间打,先打了个暴力交上去,0分滚粗
90+100+0=190酱油
神犇世界:
T1:DP,f[i]表示前i个数最少分成多少段,显然有单调性,维护以i为结尾的不升、不降段的开头最多可以延伸到前面哪个位置
T2:如蒟蒻一般的做法
T3:至今不会做法
DAY1-night
蒟蒻世界:
T1:给出一个棋盘,先手选择一个棋子并画一条线(可以是横的也可以是竖的)然后后手选择在这条线上的棋子也画一条线,但是不能与之前的线重合,谁不能画了就输了,假设两人都绝顶聪明,小A先走。这道题一开始想着找规律,结果发现不行,然后就想用完美匹配,打出来之后,也没对拍,只拿了50
T2:一共有n张纸牌分别为1…n,一开始以1…n排列在桌面上,现在她想要搞一个数组p,每一次把这列纸牌中从左往右的第i张放到pi这个位置上,经过若干次这个序列就会恢复原样,问有多少种可能的次数,因为没时间,连表都没打,爆零
T3:第三题就是给出一个矩阵,有些点不能走,有些点走了需要浪费一个单位的水,有些点上有建筑物能够补充水,有许多询问,每次询问都求出要求的从其中一个建筑走到另一个建筑,需要带多大容量的水壶,搞第一题搞了挺久,没时间做,打了个暴力,没来得及调交了上去,爆零滚粗
50+0+0=50滚粗
神犇世界:
T1:二分图匹配,每个棋子的纵坐标和横坐标连边,判断是否为完美匹配
T2:先把问题转化一下:求和为n的数的LCM方案数
看看下面的情况:
1)如果我把数分为a^x,b^y(gcd(a,b)=1)和其他一大堆数,那么这种方案和a^x,b^y,1,1,...,1和其他一大堆数是等效的
2)如果我把数分为a^x,a^y(x>y)和其他一大堆数,那么这种方案和a^x,1,1,...,1和其他一大堆数是等效的
那么的话,就可以按照质数来进行dp,f[i][j]表示访问完i个质数,和为j的方案数。所以就一大堆递推就好啦..
T3:题目就是要求最小生成树啊,然后就从每个点开始bfs,记录每个格子是谁先到的,后面的人再到达就和他连一条边,再做最小生成树就很棒了
DAY2-morning
蒟蒻世界:
T1:给出N个点,M条边的有向图,对于每个点v,求A(v)表示从点v出发,能到达的编号最大的点,想着先用强联通缩点,然后从入度为零的点往下找,找到出度为零的点之后就往上更新,然后90分
T2:数列 A1,A2,...,AN,修改最少的数字,使得数列严格单调递增,一直在搞第三题,滚粗爆零
T3:将 1 到 N 任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。问在所有排列中,有多少个排列恰好有K个“<”。
例如排列(3, 4, 1, 5, 2)
3 < 4 > 1 < 5 > 2
共有2个“<”
辛辛苦苦打出了个表,找出了规律,设f[i][j]为n=i,k=j时的方案数,发现f[i][j]=f[i-1][j-1]*(i-1-j+1)+f[i-1][j]*(j+1),然后数据挺大,就想用高精度,仿佛看到了100分,但是没时间打高精度了,就疯狂地码,想拿一半的分,打完发现错了!只能在最后的一分钟交了一份错误的代码,爆零滚粗
测完之后,自己调对了之后加了高精度,AC了(砸键盘)痛心疾首
90+0+0=90滚粗
神犇世界:
T1:强连通分量 or 拓扑排序 or DP or BFS
T2:O(nlogn)最长上升子序列做法加上少许修改:转移时必须满足a[j]-a[i]>=j-i(即数值差不小于坐标差)
T3:DP,F[i][j]表示n个数中已插入前i个数,其中有j个“<”的方案数,要高精度
DAY3-morning
蒟蒻世界:
T1:有两个人玩一个日历游戏,开始时,他们从1900年1月1日到2012年12月22日选一个日期开始,依次按照如下规则之一:1、向后跳日期跳到日历上的下一天。2、跳到日历上的下个月的同一天(如果不存在,则不能这么做)。要是谁正好到达2012年12月22日那么他就赢了,如果到达这天之后的日期那他就输了。每次都是A先走的。现在,给你一个日期,请问A一定能赢吗?一看就是博弈DP,想当然的顺推,结果爆零滚粗
T2:给出n个数,请求选出k个数,得到这k个数的最大公约数后,ans=k*最大公约数,求出最大的ans,打了个暴力DP,20分滚粗
T3:给出一个小写字符串,可以将字符串里相邻的字符交换位置,可以交换m次(不一定要交换m次,可以选择不换),求出交换m次后字典序最小的字符串,这道题我想到正解了!!这道题我想到正解了!!这道题我想到正解了!!(重要的事情说三遍)就是贪心,把尽量小的字符放在开头,但是我没用树状数组优化,50分滚粗(痛心疾首)
0+20+50=70滚粗
神犇世界:
T1:博弈DP,逆推
T2:将n个数的约数出现的个数统计出来,然后找到出现了k次及k次以上的最大的约数,将这个约数*k,就是答案
T3:贪心+树状数组优化
DAY3-night
蒟蒻世界:
T1:有一个取数的游戏。初始时,给出一个环,环上的每条边上都有一个非负整数。这些整数中至少有一个0。然后,将一枚硬币放在环上的一个节点上。两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流取数,取数的规则如下:
(1)选择硬币左边或者右边的一条边,并且边上的数非0;
(2)将这条边上的数减至任意一个非负整数(至少要有所减小);
(3)将硬币移至边的另一端。
如果轮到一个玩家走,这时硬币左右两边的边上的数值都是0,那么这个玩家就输了。
起点在第一条边和最后一条边的交点上
请问第一个玩家还是第二个玩家赢
博弈,因为必定有一条边为0,所以聪明的人肯定会将对手逼到那条边上,这样顺时针找第一个出现零的位置,然后逆时针找第一个出现零的位置,只要有一个位置的经过的边数为奇数,则第一个玩家赢,AC
T2:给出一个字符串,有'j'和'z'组成,可以调整k次,每次调整可以将任意两个位置的字符交换,请问能够组成的字符串最多有多少个'jz'的子串,果断骗分QAQ,骗了40分,美滋滋
T3:有时大型游戏玩腻味了,小Z也会玩玩弱智级的小游戏,比如连连看。但小Z眼力不行,常常得分很低。于是,他找到了你,希望你能帮他找出一种获胜方案。连连看的游戏规则很简单:玩家可以将 2 个相同图案的牌连接起来,连接线不多于 3 条线段,就可以成功将两个牌消除。将游戏界面上的牌全部消除掉,玩家就胜利了。DFS+宽搜判断,90分
100+40+90=230酱油
神犇世界:
T1:如蒟蒻解法
T2:这是一道DP题,本题的难点在于状态的确定,由于调整是任意的,很难划分状态,我们略微修改一下调整的形式:把一次'j'和'z'交换看做两次变换:'j'->'z';'z'->'j' (zz交换和jj交换是没有意义的,不作考虑);于是最多'j'->'z' 'z'->'j'各K次.
F[i,j,k]:=F[i-2,j-x,k-x]+1;
If A[i-1]=j then x=0 else x=1
If A[i]=z then y=0 else y=1
T3:如蒟蒻解法,不过我90,很迷
DAY4-morning
蒟蒻世界:
T1:给出两个骰子,给出骰子六个面的数字,求出是第一个骰子更大的率高还是第二个骰子更大的胜率高,还是胜率相同。这道题简直了,直接从小到大排数字,然后询问第一个骰子大于第二个骰子的可能种类,然后再询问一下第二个骰子大于第一个骰子的可能种类,比较一下就行了,AC
T2:有个人很喜欢吃糖果,他每天都要吃至少一个糖果,有一个糖果店,每天都有m个糖果卖,总共有n天,给出每一天里每个糖果的价格c[i][j],糖果不会过期,可以一天买多个糖果,需要保证n天都要有一个糖果吃,糖果店的老板很懒,所以他痛恨买糖果的人,所以一天里假如买k个糖果,则需要多支付k^2的代价,请问保证n天都有至少一个糖果吃的最小代价。一眼DP题,f[i][j]表示在第i天时,第1天到第i天留下j个糖果的最小代价(而且第i天需要吃的糖果已经吃了),而且要先将每天的糖果的代价从小到大排一下,方便DP,O(n^3),AC
T3:给出一棵树,每个节点一开始都有一个值,有两种操作:一、将一个节点的权值乘x,二、求出以一个节点为根的子树中所有点的权值相乘的乘积和这个乘积的约数个数,答案都要%10^9+7。我就搞一下树链剖分,每个区间记录乘积和质因数的个数(因为一个数的约数个数等于这个数分解质因数后,质因数的次幂加一后相乘),结果爆零,天啊!!
100+100+0=200酱油
神犇世界:
T1:如蒟蒻解法
T2:如蒟蒻解法
T3:直接上线段树或通过树状数组求前缀和的方式都是可以的