📄 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 + -