刷洛谷有感

1.comp函数可以这么写

bool cmp(int a,int b)

{

if(s[a]==s[b])return k[a]<k[b];//成绩相等比编号

return s[a]>s[b];否则比成绩

}

定义一个全局数组,comp可以不传递这个数组为参数而对其排序

--P1068 [NOIP2009 普及组] 分数线划定 题解

2.可以在结构体中重载<符号;

这样就不用写比较函数了,algorithm库中merge函数可以将两个已排序的数组合并,并且归并排序输入敏感,在排序度比较好的情况下时间复杂度比快速排序快很多;

3.归并排序快速计算逆序对,递归的思想

void msort(int lo,int hi)
{
	if (hi-lo<2)return;
	int i = lo, mid = (lo+hi) / 2, j = mid,k=lo;
	msort(lo, mid);
	msort(mid, hi);
	while (i < mid && j < hi)
	{
		if (a[i] <= a[j])
		{
			c[k++] = a[i++];
		}
		else
		{
			c[k++] = a[j++];
			inverseNum += mid - i ;
		}
	}
	while (i < mid)
	{
		c[k++] = a[i++];
	}
	while (j < hi)
	{
		c[k++] = a[j++];
	}
	for (int h = lo; h < hi; h++)
	{
		a[h] = c[h];
	}
}

4.P1024 [NOIP2001 提高组] 一元三次方程求解

约定该方程存在三个不同实根(根的范围在 −100 至 100 之间),且根与根之差的绝对值 ≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后 2 位。

因为根的大小差大于1,故而可以迭代i++来解,精确到小数点后2位所以二分的长度>0.001就可以了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值