2017级新生周赛(五)题解
【A】多米诺骨牌令a=M/2,a表示一列里可以放的多米诺牌数量;令sum=a*N,sum表示N列中放的多米诺牌的总数;如果是奇数行,则还需判断最后一行中可放入多米诺牌的数量,将其加入sum即可求得最多米诺牌总数。http://paste.ubuntu.com/26004399/【B】移动坐标先保证两个点的横坐标差一定是a的倍数,纵坐标差一定是b的倍数。t1=abs(x-x2)/a; t1表示最少需要多少步起点的横坐标可以达到终点的横坐标t2=abs(y-y2)/b;t1表示最少需要多少步起点的纵坐标可以达到终点的纵坐标t1和t2的差必须是偶数,我们把坐标移动不要当做横纵坐标一起移动。比如第一步:(x,y)->(xa,yb);第二步:(xa,yb)->(x2a,y); 即可以在纵坐标不变的情况下,在横坐标上进行平移,但必须平移2a步。可以思考一下http://paste.ubuntu.com/26004441/【C】01串思路一:1、通过枚举发现,在原串中如果有一段长度大于3的连续相等子串:10000000001-------------->10100000001,那么其解ans=原串最长子串长度2.2、再通过枚举发现,在原串中有一段长度为2的连续相等的子串:110101---------->010101,那么其解ans=原串最长子串长度1.以上两种方案都是通过改变原串某一个字符增加长度的,接下来我们再枚举一下通过区间翻转的情况带来增加的情况:3、再通过枚举发现,在原串中假如有两段以及两段以上的长度为2的连续相等子串:1100---------------->1010,那么其解ans=原串最长子串长度2.4、思路构建完毕,剩下的工作就是敲代码。http://paste.ubuntu.com/26004450/思路二:先求出原串的01子串长度:len可以发现答案是min(len+2,n)。可以结合思路1的三种情况思考一下。http://paste.ubuntu.com/26004976/【D】偶数错的是不是没有考虑2呀http://paste.ubuntu.com/26004455/【E】排队排序一下,判断a[n]和a[n+1]是否相等http://paste.ubuntu.com/26004467/【F】互质因为1和任何数互质。所以只需要求出相邻的不互质的个数即可,把1插入进去就好。http://paste.ubuntu.com/26004474/