| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
麻烦大牛们看看!(测试数据已过)感激不尽!#include<iostream.h>
#include<stdlib.h>
typedef struct{
int x;
int y;
int h;
int len;
}Type;
int zone[102][102];
int R, C;
Type z[10004];
int n, max_len;
int local_max(int i);
void read_data()
{
int i, j;
n = 0;
cin >> R >> C;
for(i = 0; i < R; i++)
for(j = 0; j < C; j++){
cin >> zone[i][j];
z[n].h = zone[i][j];
z[n].x = j;
z[n].y = i;
z[n].len = 0;
n++;
}
}
int cmp(const void *a, const void *b)
{
int t = (*(Type*)a).h - (*(Type*)b).h;
if(t > 0) return 1;
else if(t == 0) return 0;
else return -1;
}
void display()
{
for(int i = 0; i < n; i++)
cout << z[i].h << ' ' <<z[i].len << ' ' << endl;
}
void find()
{
int i, pos;
z[0].len = 1;
for( i = 1; i < n; i++){
pos = local_max(i);
if(pos == -1) z[i].len = 1;
else z[i].len = z[pos].len + 1;
}
}
int local_max( int j)
{
int m0, n0, m1, n1, m2, n2, m3, n3;
int len1, len2, len3, len4;
int L1, L2, L;
int pos1 = -1, pos2 = -1, pos3 = -1, pos4 = -1;
int p1, p2, p3;
int k;
m0 = z[j].x - 1; n0 = z[j].y;
m1 = z[j].x + 1; n1 = z[j].y;
m2 = z[j].x; n2 = z[j].y - 1;
m3 = z[j].x; n3 = z[j].y + 1;
if(m0 >= 0){
for( k = 0; k < j; k++)
if(z[k].h == zone[n0][m0] && z[k].h != z[j].h){
len1 = z[k].len;
pos1 = k;
break;
}
if(k == j) len1 = 0;
}
if(m1 < C){
for( k = 0; k < j; k++)
if(z[k].h == zone[n1][m1] && z[k].h != z[j].h){
len2 = z[k].len;
pos2 = k;
break;
}
if(k == j) len2 = 0;
}
if(n2 >= 0){
for( k = 0; k < j; k++)
if(z[k].h == zone[n2][m2] && z[j].h != z[k].h ){
len3 = z[k].len;
pos3 = k;
break;
}
if(k == j) len3 = 0;
}
if(n3 < R){
for( k = 0; k < j; k++)
if(z[k].h == zone[n3][m3] && z[k].h != z[j].h){
len4 = z[k].len;
pos4 = k;
break;
}
if(k == j) len4 = 0;
}
if(len1 > len2){
p1 = pos1;
L = len1;
}
else{
p1 = pos2;
L = len2;
}
if(len3 > len4){
p2 = pos3;
L1 = len3;
}
else{
p2 = pos4;
L1 = len4;
}
if(L > L1) return p1;
else if(L < L1) return p2;
if(L == L1 && L == 0) return -1;
}
void solve()
{
int i;
max_len = 0;
for(i = 0; i < n; i++){
if(z[i].len > max_len) max_len = z[i].len;
}
}
int main()
{
read_data();
qsort(z, n, sizeof(Type), cmp);
find();
solve();
display();
cout << max_len << endl;
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator