1 条题解

  • 0
    @ 2025-8-24 22:26:13

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Wan__Ye__Chu
    就算全世界都抛弃了你,但是你要记住,你身上还有几十亿的细胞,仅为你而活

    搬运于2025-08-24 22:26:13,当前版本为作者最后更新于2024-03-11 23:18:49,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    题目大意

    给定一个仅含有加减号和数字的表达式,让你在中间添加若干个加减号,使它值最大。

    思路

    很明显, 这是一道贪心 ,如果不知道怎么贪心, 那跟我来看几个小例子。

    1:114514-1919810
    可以转化为:114514-1+919810
         
    
    没看懂?没关系我们再来看一个:
    
    2:1145+4514-1919+810-114514+1919810
    
    可以转化为:1145+4514-1+919+810-1+14514+1919810
    
    

    于是,就明确了我们的思路:这道题只用添加加号,且是在减的数中间加减号。 然后连续的第一个数不是零的减数可以直接用一个加号搞定。

    参考代码

    #include<bits/stdc++.h>
    using namespace std;
    
    string a;
    int sum,j;
    
    int main()
    {
    	ios::sync_with_stdio(0);
    	cin>>a;
    	int len=a.size();
    	for(int i=0;i<len;i++)
    	{
    		if(a[i]=='+')
    			sum=0;
    		if(a[i]=='-')
    		{
    			sum=1;
    			cout<<"-";
    			continue;
    		}
    		if(sum==1 && a[i-1]!='-')
    		{
    			cout<<"+";
    			if(a[i+1]!='-' && a[i+1]!='+' && a[i]=='0')
    			{
    				cout<<a[i];
    				continue;
    			}	
    			sum=0;
    		}
    		cout<<a[i];
    	}
    	return 0;
    }
    • 1

    信息

    ID
    6206
    时间
    2000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者