• NBUT[1019]: 拔树


    https://ac.2333.moe/Problem/view.xhtml?id=1019

    • 问题描述
    • 虽然这不是一个好榜样,但是为了留下足够的空隙,XadillaX还是决定去拔掉一些树。

      这些树是整齐地排成一排,用"|"表示,中间的空隙用空格" "表示,首和尾肯定是一棵树。一个空格代表一个单位的空格。

      现在让你拔掉一定数量的树,使新的队列中最大的那个空隙最大。(忽略树本身的空隙,如果两棵树是紧挨着的,那么拔掉之后的空隙也是0)

      | || | |

      这么个排列,如果让你拔掉两棵树,那么最大空隙是2,即

      |  | |或者| |  |
    • 输入
    • 本题有多组数据,输入到EOF结束。
      每组数据第一行一个正整数N(1 <= N <= 1000),代表需要拔掉的树的数量。
      接下去一行为树的排列顺序,仅包含"|"和" ",长度不超过10000。N不会超过树的数量减2的。

    • 输出
    • 对于每组数据,输出拔树之后的最大空隙。

    • 样例输入
    • 2
      | |  | | |
    • 样例输出
    • 4
      

    判断 i 到 j 之间有多少树和空,更新答案。

    #include<stdio.h>
    #include<string.h>
    #define N 10020
    char str[N];
    int maxn(int a,int b)
    {
    	return a>b?a:b;
    }
    int main()
    {
    	int m,i,j,ans,len,sum;
    	while(scanf("%d",&m)!=EOF)
    	{
    		getchar();
    		gets(str);
    		len=strlen(str);
    		sum=0;
    		ans=0;
    		for(i=0;i<len;i++)
    			if(str[i]!='|')
    				break;
    		
    		for(j=i;j<len&&i<len;j++)
    		{
    			if(str[j]=='|')
    				sum++;
    			while(sum>m)
    			{	
    				if(str[i]=='|')
    					sum--;
    				i++;			
    			}
    				
    			if(str[j]=='|') 
    				ans=maxn(ans,j-i-sum-1);
    			else
    				ans=maxn(ans,j-i-sum+1);	
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    } 
    
  • 相关阅读:
    layout_weight使用
    Android sdk manager 下载速度慢的问题
    详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy
    object-c(oc)内存管理机制详解
    xmpp实现的即时通讯聊天(二)
    xmpp实现的即时通讯聊天(一)
    iOS开发消息推送原理
    指定的转换无效。
    Oracle11g +Win 64+PLSQL9.0
    数据库连接字符串
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/10056598.html
Copyright © 2020-2023  润新知