2021/12/04日常

  • 8:00-16:00     班里组织的团建
  • 我们团建去了森林公园,刚进去就超级多猴子,有的人手提着袋子,里面东西都被猴子抢了哈哈,我还拍了猴子的照片,哈哈哈哈哈哈哈

 有一说一,这些猴子实在是太可爱了hhhhh

  • 回来后 休息了1小时后,继续做栈的题目 其中E题,题目:
  • 羊羊们到了谈婚论嫁的年龄了,雷巨巨有的忙了。他有四种羊,每种羊分公母且公母才能配对,为方便输入用[]<>(){}代替四种羊,一天他让一些羊羊站成一排开始配对,有如下定义:假设s1和s2是满足配对的,则s2,{s1}s2,[s1]s2,(s1)s2也是满足配对的,如"[[(){}]<>]"和"{[(<>)]}"是满足配对的,而"<)()"和"]><["是不满足的,雷巨巨可以选择让其中一种羊变成另一种羊但无法改变其性别,如'<'可以变成'(','{','['但不可变成')','}',']'。问至少改变几次才能让羊羊们都找到幸福。

    Input

    输入一行字符串,仅由四种括号组成,长度不超过1e6

    Output

    如果不能使所有羊羊配对,则打印"Impossible",否则,打印最少替换的次数

    Examples

    Input

    [<}){}
    

    Output

    2

    Input

    {()}[]
    

    Output

    0

    Input

    ]]
    

    Output

    Impossible
  • 这道题主要是要判断顺序,其实也是栈,你不仅要让他左括号的总数和右括号的总数一样,还不能打乱顺序,比如   ]{[}   这个虽然总数一样,但是第一个括号是右括号,所以并没有括号可以和它组合,所以应该是impossible,还有这种的:[{]}  这种的如果你没有考虑顺序的话,这个你可能输出的是0,但是实际上是2,所以必须按顺序一个一个判断,当然,如果连左括号总数都不等于右括号总数,那就直接impossible,代码:
  • #include<stdio.h>
    main()
    {
        char str[1000010];
       char left[1000010];
       long long int l=0;
       long long int c=0;
       int f=0;
        gets(str);
       for(int i=0;str[i]!='\0';i++)
       {
            if(str[i]=='{'||str[i]=='('||str[i]=='['||str[i]=='<')
                left[++l]=str[i];
            else if(str[i]=='}'||str[i]==')'||str[i]==']'||str[i]=='>')
            {
                if(l==0)
                {
                	l=1;
                    break;
                }
                if(str[i]=='}'&&left[l]!='{')
                    c++;
                else if(str[i]==')'&&left[l]!='(')
                    c++;
                else if(str[i]==']'&&left[l]!='[')
                    c++;
                else if(str[i]=='>'&&left[l]!='<')
                    c++;
                l--;
            
    		}
        }
        if(l==0)
        printf("%lld\n",c);
        else
        printf("Impossible\n");
    }
     A题:
  • Farmer John的奶牛在风中凌乱了它们的发型……
    每只奶牛都有一个身高hi(1 ≤ hi ≤ 1,000,000,000),现在在这里有一排全部面向右方的奶牛,一共有N只(1 ≤ N ≤ 80,000)。对于奶牛i来说,如果奶牛i+1,i+2,……,N这些奶牛的身高严格小于奶牛i,则奶牛i可以看到它们凌乱的发型。
    比如下面这个例子:

    * * * * = *
    = * * * = *
    = * - * = * 奶牛面向这边-->
    = * = * = *
    = - = = = *
    = = = = = =
    1 2 3 4 5 6
    ('*'表示空的,这是译者为了格式特意弄的,原题没有)

    令ci表示第i只奶牛能够看到的发型数量,请计算c1 + c2 + c3 + … + cN的值
    对于上面这个例子,答案为3 + 0 + 1 + 0 + 1 + 0=5。

    输入

    第一行:奶牛数量N
    第二到N+1行:第i+1行输入奶牛i的身高

    输出

    第一行:一个整数即c1到cN的和

    样例输入

    6
    10
    3
    7
    4
    12
    2

    样例输出

    5

  • 这题也是栈,首先10往前看,可以看见3,7,4;3被7挡住了,看不见一个;7可以看见4;4被12挡住了,看不见一个;12可以看见2;所以输出是5。所以依次判断,首先输入10,判断前一位是否比自己矮,矮的话顶部就减一,用一个变量来记录每一轮判断的数之和,最后输出总数。代码:

  • #include<cstdio>
    #include<iostream>
    using namespace std;
    int a[100000];
    int main() {
    	int n,top;
    	int num;
    	long long cnt = 0;
    	cin>>n;
    	for(int i = 0;i<n;i++)
    	{
    		cin>>num;
    		while(top>0&&a[top-1]<=num)
    		{
    			--top;
    		}
    		cnt+=top;
    		a[top ++] = num; 
    	}
    	printf("%lld\n",cnt);
    }

    goodbye

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烂尾歌·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值