球体问题
参考百度百科中球缺的公式
http://baike.baidu.com/view/810951.htm
有了这个公式,表面积和体积就迎刃而解
至于能否浮起来,就是高中物理了……
修剪草坪
这道题目,倒是想了一段时间,然后有这么一个猜想,每一个元素得是该列或者该行的最大值,才能满足修剪的条件
仅仅是猜想,但是这样写的代码还是AC了,至于猜想的证明…………(哪位大神能给个证明)
PS:这道题貌似是今年新题,并且是偏想的(抖胆猜测是机智的Eureka出的题目)
合并果子
题目大意很简单,使用贪心直接可以水过,
先用qsort做一个快排,然后合并最小的两个,每次合并之后,把合并之后的数字放到合适的位置,时间复杂度o(n2)。
修正版,作为一道NOIP的题目,大数据肯定是有的,10000的数据,n^2的复杂度肯定过不了(不知为何poj3253那道题20000用上面方法都过了)
快排还是用了,然后另外开了一个数组记录合并好的堆,原始堆为a,合并堆为b,因为每次合并之后,肯定比之前的合并堆数据要大,所以就成了一个优先队列,
然后就判断min(合并两个原始堆,合并原始堆和合并堆,合并两个合并堆),再根据min的取值移动两个队列的指针即可。
在合并过程中的时间复杂度为o(n),但是因为之前有快排的o(nlogn)时间复杂度,所以整体时间复杂度还是o(nlogn)
ps:但愿不会被rejudge掉……
扫雷
c语言平时作业做过这道题目,容易出现的错误就是数组越位,需要在上下左右各添一行或者一列,然后就能有效防止数组越位,
另外一个代码美化的方法,就是开两个方向数组,然后使用方向数组对八个方向进行访问。
int tx[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
int ty[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
for( t = 0; t < 8; t++ )
{
cnt[x+tx[t]][y+ty[t]]++;
}