Anonymous 发表于 2021-12-8 18:37:28

C语言

有长成一种奇怪形状的积木,这种积木很长,但只有h,2h两种高度,长成锯齿状。
现在有两块长度未知的积木,他想把这两块积木拼在一起,即锯齿对准锯齿,中间有缝隙也没有关系,使得最后得到的拼接后的积木,高度不超过3h,长度最短,请你找到他能拼成的最短的长度是多少(只按照题目输入的状态进行拼接,不能对积木进行任何翻转)。


第一行输入两个正整数n,m,表示两个积木的长度。
接下来的两行输入两个仅包含(1和2)的字符串s,t,分别表示两个积木的高度是1h还是2h。
(1<=n,m<=100


输出一个正整数,表示能拼成满足题意的最短的长度。


样例输入
8 8
12121212
21212121
样例输出
8

jhq999 发表于 2021-12-13 12:16:08

本帖最后由 jhq999 于 2021-12-13 12:57 编辑

int main()
{
int m=0,n=0,i=0,j=0,begin=0,end=0,min=0,tmp=0;
scanf("%d%d",&m,&n);
if(m<n)tmp=m,m=n,n=tmp;
int *am=new int,*an=new int;
i=0;
while(i<m)scanf("%d",&am);
i=0;
while(i<n)scanf("%d",&an);
min=n;
for(i=0;i<m-n;i++)
{
   
    for(j=0;j<n&&j+i<m;j++);
    {
       if(am+an>3)break;
   }
       
   if(j==n)
   {
          begin=-1;
          for(j=0;(j<n)&&(j+i<m);j++)
          {
               if(-1==begin)
                           {
                                  if(am+an==3)begin=j;
                           }
               else if(am+an<3||j==(n-1))
               {
                  end=(j==(n-1))?(j+1):j;
                  if(end-begin==1)break;
                  if(end-begin<min)min=end-begin,begin=-1,end=m+n;
                }
         }
   }
   if(end-begin==1)
   {
          min=1;
          break;
      }
}
//输出min
delete[] am;
delete[] an;
return 0;
}
页: [1]
查看完整版本: C语言