?? water.cpp
字號:
#include<stdio.h>
#define LONG 100
int n,m;
int high[LONG]={0},high2[LONG]={0},pip[LONG]={0};
int v[LONG][LONG]={0};
int i,a,r;
int s,l=0;
//---------------------------------------------------------------------
void deal(int i,int a,int n1);
void deal1(int i,int a,int m1)
{int j,k,h;
k=0;
h=high[a];
v[i][k]=high[a];k++;
v[i][k]=m1;k++;
for(r=0;r<n;r++)
{
if(high[r]==m1)break;
}
a=r;
a--;
while(a>=0)
{if(high[a]<v[i][k-1])
{v[i][k]=high[a];
k++;
}
else if(high[a]>v[i][k-1])
{j=k-1;
while(v[i][j]<high[a])
{if(j==0)s=v[i][j];
v[i][j]=0;
j--;
if(j<0)break;
}
if(j<0)
{
deal(i,a,h);break;
}
if(j>=0){j++;v[i][j]=high[a];}
}
a--;
}
}
void deal(int i,int a,int n1)
{int j,k,h;
k=0;
h=high[a];
v[i][k]=high[a];k++;
v[i][k]=n1;k++;
for(r=0;r<n;r++)
{
if(high[r]==n1)break;
}
a=r;
a++;
while(high[a]!=0)
{if(high[a]<v[i][k-1])
{v[i][k]=high[a];
k++;
}
else if(high[a]>v[i][k-1])
{j=k-1;
while(v[i][j]<high[a])
{if(j==0)s=v[i][j];
v[i][j]=0;
j--;
if(j<0)break;
}
if(j<0)
{
deal1(i,a,h);break;
}
if(j>=0){j++;v[i][j]=high[a];}
}
a++;
}
}
//---------------------------------------------------------------------
void main()
{int k,j;
int m1,n1;
int t,g;
scanf("%d,%d",&n,&m);//輸入nm
n=n+1;
for(i=0;i<n;i++)
scanf("%d",&high[i]);//輸入高度
for(i=0;i<m;i++)
scanf("%d",&pip[i]);//輸入水龍頭位置
for(i=0;i<m;i++)
{k=0;
a=pip[i];
m1=high[a];
n1=high[a+1];
if(m1>n1)//左高右矮
{a=a+2;
v[i][k]=m1;k++;
v[i][k]=n1;k++;
for(r=0;r<n;r++)
{
if(high[r]==n1)break;
}
a=r;
a++;
while(a<n)
{if(high[a]<v[i][k-1])
{v[i][k]=high[a];
k++;
}
else if(high[a]>v[i][k-1])
{j=k-1;
t=high[a];
while(v[i][j]<t)
{
v[i][j]=0;
j--;
if(j<0)break;
}
if(j<0)
{
deal1(i,a,m1);break;
}
if(j>=0){j++;v[i][j]=high[a];}
}
a++;
}
}
else if(m1<n1)//左矮右高
{a--;
v[i][k]=n1;k++;
v[i][k]=m1;k++;
for(r=0;r<n;r++)
{
if(high[r]==m1)break;
}
a=r;
a--;
while(a>=0)
{if(high[a]<v[i][k-1])
{v[i][k]=high[a];
k++;
}
else if(high[a]>v[i][k-1])
{j=k-1;
while(v[i][j]<high[a])
{
v[i][j]=0;
j--;
if(j<0)break;
}
if(j<0)
{
deal(i,a,n1);break;
}
if(j>=0){j++;v[i][j]=high[a];}
}
a--;
}
}
}
//------------------------------------------
printf("\n\nanswer:\n");//輸出結果//
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{printf("%d ",v[i][j]);//
if(j==n-1)printf("\n");//
} //
for(i=0;i<n;i++)
{printf("%d ",high[i]);
if(i==n-1)printf("\n");
}
//--------------------------------------------
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -