【链接】http://www.codeforces.com/contest/253
【A. Boys and Girls】
【题目大意】
让N个男孩,M个女孩排在一行,使得相邻的孩子(i && i+1)性别不同的个数最大
【参考算法】
让男孩和女孩相间排列显然是一种比较优秀的选择。
如果男孩比女孩多,那么先排男孩,然后女孩,直到女孩都被领走了,后面排剩下的男孩。
反之相同。
【小结】
No?
【参考代码】
A.
【B. Physics Practical】
【题目大意】
有N个数,让你取出k个数,使得剩下的n-k个数中的最大值y和最小值x满足 x*2 >= y
让你求最小的k
【参考算法】
先将这N个数按升序排序。这样我们给每个数定义一个值F[i]表示以它为最小的数时最多可以囊括到序列的第几个数
显然F[i]是升序的,所以我们可以用一个指针j来表示第i个数的F[i]值
最终答案就是min( N - (F[i]-i+1) )
【小结】
No.
【参考代码】
B.

【C. Text Editor】
【题目大意】
模拟在TXT文件中光标的移动,使得给定的开始位置(r1,c1)到结束位置(r2,c2)的按上下左右的次数最少。
【参考算法】
用 y 表示 从 r1 行到 x 行 再从 x 行到 r2 行 的光标位置
则答案就是min(abs(c2-y) + abs(r1-x) + abs(r2-x))
【小结】
y = min(c1,a[x..r1],a[x..r2])
n 只有100,所以枚举或者n^2预处理出来就行了。。
唉。。我还写了个RMQ。。屌丝了。。。
【参考代码】
C.

【Table with Letters - 2】
【题目大意】
给你一个N*M的字符矩阵,让你求它规定的矩阵存在多少
规定的矩阵要求:
1.矩阵四个角必须一样
2.矩阵里面包含的'a'字符不能超过K
【参考算法】
枚举I行和J行(或列,以下使用行进行计算) (其中 I < J )
然后找出 ch 字符('a'..'z')在两行中共同出现的位置E[i]
将E[i]排序
定义两个指针i ,j 表示在E[i]位置时,在满足矩阵包含的'a'字符不超过K时最多可以到E[J]  (i < j)
这样ANS = ∑ 满足条件的i ,j的( j - i )
在读入数据的时候 利用边表 得到 每行的 ch 字符 的降序序列C[I]
然后比较 C[I]  和 C[J] 就可以得到 E[i]

对于条件2可以预处理出 sum[i][j]表示 (1,1) 到 (i,j)的'a'的个数
判断的时候就可以这样 sum[J][E[j]] - sum[I-1][E[j]] - sum[J][E[i]-1] + sum[I-1][E[i]-1] <= K
【小结】
写的好像有点渣。。
最大的答案是 (400*399)^2/4 超过了int ,所以要用long long 表示ANS
【参考代码】
D.