250:
给一棵树,两个人玩游戏,轮流切断一条边,然后选择留下一个连通块,最后会剩下一个点,第一个人想最后剩下来的点的点权最大,第二个人想让他最小,问最后剩下的点的点权
智商题啊,,,答案就是最大的叶子。。知道结果后,想想就清楚了。
500
给定n k,求有多少的长度为n的“字符串”对 A B,满足A + C = C + B
各种讨论之后可以得到A B是循环同构的(还是不影响大家的思考的独立性了 = =)
因此直接乱搞之。。
1000
给两个数组(告诉你生成方法,其实可以认为是随机的)
然后任意排列这两个数组,之后
for(int i = 0; i < n; i++) {
c[i] = a[i] + b[i];
}
.,然后问你C数组里面的众数以及这个数出现的次数,有多个出现次数最多的数时挑数字大的数。
这个题的
有一个很恶搞的方法。
数据随机的话很多数的出现次数不会很多,就假设为10次好了。那么我们可以利用这个进行暴力
具体暴力的方法就是
for(int i =1 ;i <= 10; i++) {
出现次数 >= i的就为 1次,否则为0次
进行卷积
}
这样子卷积之后的结果,对于出现次数为(a,b)的两个数会算到了min(a, b)次,也就是所有的出现次数<=10的数已经不用考虑了,>10的数已经考虑了10次。
接下来的数暴力算就好了。
https://github.com/becauseofyou/Contests/blob/master/Topcoder/srm603/SumOfArrays.cpp