首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求大神解答O(∩_∩)O~该如何解决

2013-01-08 
求大神解答O(∩_∩)O~Description 输入一个二维数组A[5][5](无序),将其所有元素排序后从小到大按照A[0][0],A

求大神解答O(∩_∩)O~
Description

 输入一个二维数组A[5][5](无序),将其所有元素排序后从小到大按照A[0][0],A[0][1],…,A[0][4],A[1][0],…,A[4][4]顺序存放,请写出一个比较高效率的程序搜索任一输入值x在经过上述处理后的数组中的位置,如果不在数组中,则输出-1,如果x不止出现1次,则输出在处理后二维数组中靠左或者靠上的一个。
Input

 第一行为测试用例的数量,从第二行开始,每6行为一组测试数据,每组测试数据的第一行为输入值x,接下来的每一行测试数据中有5个整数,用空格分隔
Output

 每组测试用例的结果输出到一行,每组结果包含两个整数,分别是输入值x所在的行号和列号,如果x不在数组中,则行和列均输出-1
Sample Input
Copy sample input to clipboard

6
10
8 1 2 7 2
4 6 1 3 5
10 9 6 20 3
8 7 12 4 5
22 21 16 23 4
-2
8 6 7 1 2
10 9 12 3 6
1000 2 9 6 9
4 20 28 32 37
0 1 7 -1 2
1000
-10 -1000 2 4 5
1000 2000 3000 2768 3125
2000 1514 1357 1000 0
5 43 3 2 1
3 8 6 7 1
11
1 111 11 1111 111
1010 1001 1100 1110 1101
1011 101 11 1 -1
10 100 110 120 119
1212 213 1324 10 8
9999
8 1 9 2 0
2 6 5 1 3
6 7 2 1 3
7 5 6 4 0
0 9 3 8 8
14
-2 0 50 70 30
3 6 90 20 25
13 15 24 17 -14
100 98 64 43 40
0 93 88 43 15

Sample Output

3 3
-1 -1
3 1
1 1
-1 -1
-1 -1

Hint

 二分的思想

[解决办法]
看到这个题目直接的想法find找到要搜索的值,然后nth_element得到位置

[解决办法]
先排序后二分查找,不过由于有可能相同, 查找到还要继续在小于部分二分查找,大概类似stl中的lower_bound()函数
[解决办法]
把二维数组当转换成一维处理

[解决办法]
连排序都不需要,直接遍历一遍就可以了

int main(void)
{
int A[5][5] = {0};
int* a=&A[0][0];
int n=0;
int data;
cin>>n;
while (n--)
{
cin>>data;
for (int i=0; i<25; i++)
cin>>a[i];
int pos = 0;
bool exist = false;
for (int i=0; i<25; i++)
{
if (a[i] < data)
pos++;
else if (a[i] == data)
exist = true;
}
if (exist)
cout<<pos/5<<' '<<pos%5<<endl;
else
cout<<-1<<' '<<-1<<endl;
}
getchar();
return 0;
}

热点排行