1 条题解

  • 0
    @ 2025-8-24 22:23:14

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar LikeJ
    这个家伙很强,什么也没有留下

    搬运于2025-08-24 22:23:14,当前版本为作者最后更新于2020-09-11 21:16:34,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    观前提示

    博客食用更加

    题目传送门

    这题可以利用的思想

    每一种弦都用一种栈(本人太蒟,不会用STL)

    如果有数进来时

    就和栈顶比较大小

    如果栈顶>进来的数

    就要出栈

    注意:

    1516151\quad 5\quad 1\quad 6\quad 1\quad 5 时,虽然已经按过 151\quad 5,但是也要先松开 161\quad 6 的键,然后可以不用按 151\quad 5 (用其他方法的小朋友们!敲黑板!做笔记!)

    接下来是AC代码(有注释)

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,p,x,y,s,sum[7],a[7][300005];
    int main()
    {
    	scanf("%d%d",&n,&p);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d%d",&x,&y);
    		while(sum[x]>=1&&a[x][sum[x]]>y)//判断栈是否空,还有比较栈顶
    		{
    			sum[x]--;//减减
    			s++;//累加次数	
    		}
    		if(a[x][sum[x]]==y)continue;//如果与栈顶相同就跳过
    		a[x][++sum[x]]=y;//入栈
    		s++;//累加次数
    	} 
    	printf("%d",s);//输出次数
    	return 0;
    } 
    

    谢谢

    • 1

    信息

    ID
    5713
    时间
    1000ms
    内存
    32MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者