1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > D - Pair of Topics

D - Pair of Topics

时间:2023-07-01 17:56:53

相关推荐

D - Pair of Topics

D - Pair of Topics

思路:

这个题需要一点思路,ai+aj>bi+bj可以转换成ai-bi+aj-bj>0,也就是c[i]=a[i]-b[i],只需要找c[i]+c[j]大于0

一开始的想法是枚举i和j,但是很显然会超时

a和b数组内部的顺序不会影响正确答案个数,所以可以排序

从两头缩进,如果a[r]加上比较小的a[l]大于0,那么就有l-r种方法,因为比a[l]大的数加上a[r]也会大于0,这样就能保证方法没有遗漏

当a[l]+a[r]不大于0的时候,说明a[l]太小了,l向右移来找一个更大的a[l]

代码:

#include

#include

#include

using namespace std;

long long a[200005], b[200005], c[200005];

int main(){

long long n, sum = 0;scanf("%lld", &n);for (int i = 0; i < n; i++)scanf("%lld", &a[i]);for (int i = 0; i < n; i++)scanf("%lld", &b[i]);for (int i = 0; i < n; i++)c[i] = a[i] - b[i];sort(c, c + n);int flag, cnt;flag = 0; cnt = n - 1;while (1){if (flag == cnt)break;if (c[flag] + c[cnt]>0){sum += (cnt-flag);cnt--;}else{flag++;}}printf("%lld", sum);return 0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。