1712一个搜索问题

来源:互联网 发布:阿里云企业版 编辑:程序博客网 时间:2024/06/08 10:57

一个搜索问题

Time Limit: 1 Seconds     Memory Limit: 32768 K

Total Submit:580     Accepted:222


Description

设n个不同的整数按升序存于数组A[1..n]中,设计一个时间复杂性为Θ(logn)的分治算法求下标i使得A[i]=i,若不存在这样的下标,则输出0。

Input

输入的第一行是一个正整数k,表示测试例个数。接下来几行是k个测试例的数据,每个测试例的数据由两行组成,其中第一行为一个正整数n (n<=1000),表示整数序列的长度,第二行给出整数序列,整数之间用一个空格隔开。

Output

对于每个测试例输出一行,含一个整数,若存在满足条件的下标,则该整数表示满足条件的最小下标值,否则为0。

Sample Input

250 2 3 5 972 3 4 5 6 7 8

 

Sample Output

20

 

#include<iostream.h>int find(int a[],int low,int high){if(low>high)return 0;else{int mid,d1,d2;mid=(low+high)/2;d1=find(a,low,mid-1);d2=find(a,mid+1,high);if(d1!=0)if(d2==0||d2>d1)d2=d1;if(a[mid]==mid)if(d2==0||d2>mid)d2=mid;return d2;}}int main(){int a[1001],i,j,n,m;    cin>>m;while(m--){cin>>n;for(i=1;i<=n;i++)cin>>a[i];j=find(a,1,n);    cout<<j<<endl;}return 0;}
原创粉丝点击