研究了n久,原来是题意理解有问题.,,
这句话很诡异 Then rows of the matrix are sorted in alphabetical order, where ‘0’ is before ‘1’'
经过研究,发现题意原来是这样的 : 1.所有行都是经过某一行的rotated versions 2.即上面这句话的理解:将所有的rotated versions 排序.... 3.由1和2,所以行的顺序和生成rotated versions 的顺序相比,是混乱的....
注意到有一点是确定的,同一行中最后一个数和第一个数的关系.
方法: 因为是经过按照row排序的,所以第一列肯定是排好序.第一列和最后一列对照,可得出以上说的"混乱"的顺序,保存在next数组里. 最后按照next数组的顺序排列input数据...
这题费了我一个半小时,网上也找不到任何代码和算法,确实是经典啊~~
destination[] 放输入数据,即最后一列
ans[]放第一列
next[]是根据这两列比较得到的顺序
#include <iostream>
using namespace std;
int destination[3001];
int next[3001];
bool flag[3001];
int ans[3001];
int main()
{
int n, i = 1,j=1;
int zero = 0 , one = 0;
cin >> n;
for ( ; i <= n; i++)
{
cin >> destination[i];
if(destination[i] == 0)
zero++;
else
one++;
}
memset(flag,1,sizeof(flag));
for(i = 1;i <= zero;ans[i++] = 0);
for( ;i <= n ;ans[i++] = 1);
for(i = 1; i <= n; i++)
{
j = 1;
while(ans[i] != destination[j] || flag[j] == 0 ) j++;
next[i] = j;
flag[j] = 0;
}
j = 1;
for( i = 1 ; i <= n; i++)
{
j = next[j];
cout<<destination[j]<<" ";
}
cout<<endl;
return 0;
}
看了流牛师兄的分析写的,就这样好奉献了一次RE,很不应该啊!