6 条题解

  • 0
    @ 2024-9-28 16:38:34

    J4C 消えた夏の夢题解

    思路

    贪心,显然选了负数之后,还要再选一次(不然就没必要选),此时答案没增加减少,不优。

    所以遇到正数就取了,且只取一次。

    复杂度

    时间复杂度: O(n)O(n)

    空间复杂度: O(n)O(n)

    Code

    #include <bits/stdc++.h>
    using namespace std;
    
    long long n, p;
    
    int main() {
    	scanf("%lld%lld", &n, &p);
    	for (int x ; n-- ; )
    		scanf("%d", &x), p += max(0, x);
    	printf("%lld\n", p);
    	return 0;
    }
    
    • 0
      @ 2024-9-8 18:06:21

      「RiOI-4」消えた夏の夢题解

      思路

      超级大水题。

      根据题目描述,我们可以很容易的想到,只要把所有的正数与原数加上即可。

      因为加上一个负数会让 xx 的值变小,且就算再加一次也只是与上一次操作抵消,不会产生贡献,所以不需要处理负数。

      思路有了,代码就很好写了。

      Code

      #include<bits/stdc++.h>
      using namespace std;
      typedef long long ll;
      ll n,p,b;
      int main()
      {
      	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
      	cin>>n>>p;
      	for(int i=1;i<=n;i++)
      	{
      		cin>>b;
      		if(b>0) p+=b;
      	}
      	cout<<p;
      	return 0;
      }
      
      • -1
        @ 2024-10-4 20:15:57

        标题

        思路

        解题方法

        复杂度

        时间复杂度:

        添加时间复杂度, 示例: O(n)O(n)

        空间复杂度:

        添加空间复杂度, 示例: O(n)O(n)

        Code

        • -1
          @ 2024-10-4 15:04:49

          J4C 消えた夏の夢

          思路

          一开始看的时候吓了一跳还以为又是什么动规贪心,结果仔细一看又吓了一跳…… 怎么说呢,观察样例可以知道,直接把所有正整数和原本的数加起来就好了。。。

          解题方法

          代码奉上:

          #include<iostream>
          using namespace std;
          int main(){
          long long int a,b;
          cin>>a>>b;
          long long int tmp;
          while(a--){
              cin>>tmp;
              if(tmp>0)b+=tmp;
          }
          cout<<b;
          return 9;
          }
          

          空间复杂度/时间复杂度

          O(n)O(n)吧,这个不重要,毕竟解题就是个枚举没得说

          • -1
            @ 2024-9-19 12:48:38

            { #include<bits/stdc++.h> using namespace std; #define int long long int a[1000005]; signed main() { int n,p; cin>>n>>p; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); for(int i=1;i<=n;i++) { p+=a[i]; if(a[i]<0) { a[i]=-a[i]; p+=a[i]; } else a[i]=-a[i]; } cout<<p; return 0; } }

            • -1
              @ 2024-9-8 19:10:15

              J4C 消えた夏の夢

              思路

              既然需要最大值,那么不要加负数即可,把整数累加后加上 pp 即可,记得开 long long

              加了负数也没用,加上后为了最大还要加上相反数,不如不加。

              复杂度

              时间复杂度:

              O(n)O(n)

              空间复杂度:

              O(n)O(n)

              Code

              #include <bits/stdc++.h>
              using namespace std;
              int a[100005];
              int main()
              {
              	long long n,s;
              	cin >> n >> s;
              	for (int i = 1;i <= n;i++) 
              	{
              		cin >> a[i];
              		if (a[i] > 0) s = s + a[i];
              	}
              	cout << s;
                  return 0;
              }
              
              • 1

              信息

              ID
              48
              时间
              1000ms
              内存
              512MiB
              难度
              2
              标签
              递交数
              414
              已通过
              271
              上传者