鱼C论坛

 找回密码
 立即注册
查看: 1315|回复: 1

C语言

[复制链接]
匿名鱼油
匿名鱼油  发表于 2021-12-8 18:37:28 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


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


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


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

使用道具 举报

发表于 2021-12-13 12:16:08 | 显示全部楼层
本帖最后由 jhq999 于 2021-12-13 12:57 编辑
  1. int main()
  2. {
  3. int m=0,n=0,i=0,j=0,begin=0,end=0,min=0,tmp=0;
  4. scanf("%d%d",&m,&n);
  5. if(m<n)tmp=m,m=n,n=tmp;
  6. int *am=new int[m],*an=new int[n+1];
  7. i=0;
  8. while(i<m)scanf("%d",&am[i++]);
  9. i=0;
  10. while(i<n)scanf("%d",&an[i++]);
  11. min=n;
  12. for(i=0;i<m-n;i++)
  13. {
  14.    
  15.     for(j=0;j<n&&j+i<m;j++);
  16.     {
  17.        if(am[j+i]+an[j]>3)break;
  18.      }
  19.        
  20.      if(j==n)
  21.      {
  22.           begin=-1;
  23.           for(j=0;(j<n)&&(j+i<m);j++)
  24.           {
  25.                if(-1==begin)
  26.                            {
  27.                                   if(am[j+i]+an[j]==3)begin=j;
  28.                            }
  29.                else if(am[j+i]+an[j]<3||j==(n-1))
  30.                {
  31.                   end=(j==(n-1))?(j+1):j;
  32.                   if(end-begin==1)break;
  33.                   if(end-begin<min)min=end-begin,begin=-1,end=m+n;
  34.                 }
  35.            }
  36.      }
  37.      if(end-begin==1)
  38.      {
  39.           min=1;
  40.           break;
  41.       }
  42. }
  43. //输出min
  44. delete[] am;
  45. delete[] an;
  46. return 0;
  47. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 06:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表