用c语言和二分查找解决这个问题描述:描述:Given an array, find the number of [i,j] (i and j are the indexes of the array (数组下标), not values) tuples in the array that satisfy array[i]+array[j]<=k. 输入:There are several test cases. For each test case, The first line contains two positive integers n (1<=n<=10^5) and k (1<=k<=10^18). The second line contains n integers, and the ith integer represents the value of array[i](1<= array[i]<=10^9). 输出:For each test case, output an integer representing the answer.

时间: 2024-02-18 11:05:11 浏览: 36
好的,让我解释一下这个问题的意思。题目要求我们在一个给定的数组中,找到所有满足条件 array[i]+array[j]<=k 的下标对 [i,j],并输出满足条件的下标对数量。 下面是使用 C 语言和二分查找算法的解法: ```c #include<stdio.h> #include<stdlib.h> #define MAXN 100005 long long a[MAXN]; int cmp(const void *a, const void *b) { return *(long long *)a - *(long long *)b; } int binary_search(long long *a, int l, int r, long long x) { int mid; while (l <= r) { mid = l + (r - l) / 2; if (a[mid] <= x) { l = mid + 1; } else { r = mid - 1; } } return r; } int main() { int n; long long k; while (scanf("%d%lld", &n, &k) != EOF) { for (int i = 0; i < n; i++) { scanf("%lld", &a[i]); } qsort(a, n, sizeof(long long), cmp); long long ans = 0; for (int i = 0; i < n; i++) { int j = binary_search(a, i+1, n-1, k-a[i]); ans += j - i; } printf("%lld\n", ans); } return 0; } ``` 首先,我们需要对输入的数组进行排序,这样可以方便我们使用二分查找算法。然后,我们遍历数组中的每个元素 a[i],在剩下的 a[i+1] 至 a[n-1] 中寻找满足条件的元素 a[j],即 a[j] <= k - a[i]。我们可以使用二分查找算法在剩下的元素中查找满足条件的元素,从而求得满足条件的下标对数量。最后,我们将所有满足条件的数量累加起来,即为最终的答案。 注意,题目中给出的数组下标从 0 开始,而二分查找算法中的下标 i、j 都从 1 开始,因此在二分查找函数中,我们需要将 i+1 转换为实际的下标。 时间复杂度为 O(nlogn)。

相关推荐

最新推荐

recommend-type

C语言程序设计实现二分查找算法

1)将二分查找元素算法分为三个部分输入元素、查找元素、进行判断! 2)如果查找的元素在原始的元素中找不到话可以进行判定是否进行重新输入,查找,可以选择拒绝1 3)输入原始元素使用升序输入,采用切割的方法进行...
recommend-type

C语言实现顺序表的顺序查找和折半查找

主要为大家详细介绍了C语言实现顺序表的顺序查找和折半查找,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言使用广度优先搜索算法解决迷宫问题(队列)

主要介绍了C语言使用广度优先搜索算法解决迷宫问题,结合迷宫问题分析了C语言队列广度优先搜索算法的相关使用技巧,需要的朋友可以参考下
recommend-type

单片机C语言程序设计:T0控制LED实现二进制计数

说明:本例对按键的计数没有使用查询法,没有使用外部中断函数,没有使用定时或计数中断函数。而是启用了计数器,连接在 T0 引脚的按键每次按下时,会使计数寄存器的值递增,其值通过 LED以二进制形式显示
recommend-type

C语言基于回溯算法解决八皇后问题的方法

主要介绍了C语言基于回溯算法解决八皇后问题的方法,简单描述了八皇后问题,并结合实例形式分析了C语言使用回溯算法解决八皇后问题的相关操作技巧,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB结构体与对象编程:构建面向对象的应用程序,提升代码可维护性和可扩展性

![MATLAB结构体与对象编程:构建面向对象的应用程序,提升代码可维护性和可扩展性](https://picx.zhimg.com/80/v2-8132d9acfebe1c248865e24dc5445720_1440w.webp?source=1def8aca) # 1. MATLAB结构体基础** MATLAB结构体是一种数据结构,用于存储和组织相关数据。它由一系列域组成,每个域都有一个名称和一个值。结构体提供了对数据的灵活访问和管理,使其成为组织和处理复杂数据集的理想选择。 MATLAB中创建结构体非常简单,使用struct函数即可。例如: ```matlab myStruct
recommend-type

详细描述一下STM32F103C8T6怎么与DHT11连接

STM32F103C8T6可以通过单总线协议与DHT11连接。连接步骤如下: 1. 将DHT11的VCC引脚连接到STM32F103C8T6的5V电源引脚; 2. 将DHT11的GND引脚连接到STM32F103C8T6的GND引脚; 3. 将DHT11的DATA引脚连接到STM32F103C8T6的GPIO引脚,可以选择任一GPIO引脚,需要在程序中配置; 4. 在程序中初始化GPIO引脚,将其设为输出模式,并输出高电平,持续至少18ms,以激活DHT11; 5. 将GPIO引脚设为输入模式,等待DHT11响应,DHT11会先输出一个80us的低电平,然后输出一个80us的高电平,
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。