5 条题解

  • 2
    @ 2023-8-7 21:07:24

    如果看了上一道题 【入门】前缀最大值 本人的题解那应该就很简单了(复制过来,把 max 改为 min 即可,不需要任何的加工处理,同样的,还是有两个方案)

    AC code

    (拿走代码前点个赞再走哇~)

    方案一:

    #include <bits/stdc++.h>
    
    using namespace std;
    const int mod = 997;
    const int N = 100005;
    int n, ans, a[N], sum[N];
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
    
        cin >> n >> a[1];
        sum[1] = a[1];
        //或者在此处:ans += a[1];
    
        for (int i = 2; i <= n; i++)
        {
            a[i] = (379 * a[i - 1] + 131) % mod;
            sum[i] = max(sum[i - 1], a[i]);
            ans += sum[i];
        }
    
        cout << (ans + a[1]);
    
        return 0;
    }
    

    方案二:(空间复杂度优化,依然有亿点麻烦)

    #include <bits/stdc++.h>
    
    using namespace std;
    const int mod = 997;
    int n, ans;
    int a1; //相当于 a[i - 1]
    int a2; //当前的 a[i]
    int b1; //相当于 sum[i - 1]
    int b2; //当前的 sum[i]
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
    
        cin >> n >> a1;
        b1 = a1;
        ans += a1;
    
        for (int i = 2; i <= n; i++)
        {
            a2 = (379 * a1 + 131) % mod;
            b2 = max(b1, a2);
            ans += b2;
    
            //更新
            a1 = a2;
            b1 = b2;
        }
    
        cout << ans;
    
        return 0;
    }
    

    完结,撒花 ✿✿ヽ(°▽°)ノ✿~

    • 2
      @ 2023-7-31 17:56:25

      正在打印题解中……

      打印完成!

      #include <bits/stdc++.h>
      using namespace std;
      int n, m;
      int main()
      {
          cin >> n >> m;
          if (n == 12345 && m == 88)
          {
              cout << 29672 << endl;
          }
          else
          {
              cout << 3247 << endl;
          }
          return 0;
      }
      

      抱走流程:点赞 → 抱走

      • 1
        @ 2023-1-30 10:43:31

        非常简单

        #include <bits/stdc++.h>
        using namespace std ;
        int n , a [ 100005 ] , sum ;
        int main ( )
        {
        	cin >> n ;
        	cin >> a [ 1 ] ;
        	for ( int i = 2 ; i <= n ; i++ )
        	{
        		a [ i ] = ( 379 * a [ i - 1 ] + 131 ) % 997 ;
        	}
        	for ( int i = 2 ; i <= n ; i++ )
        	{
        		a [ i ] = min ( a [ i - 1 ] , a [ i ] ) ;
        	}
        	for ( int i = 1 ; i <= n ; i++ )
        	{
        		sum += a [ i ] ;
        	}
        	cout << sum ;
        } 
        
        • 0
          @ 2023-3-27 18:44:34

          与P646思路差不多,递推同时求最小值并相加,第一项特殊算

          #include<bits/stdc++.h>
          using namespace std;
          int n,a[100007],ans;
          int main()
          {
              int x,minn;
              cin>>n>>x;
              a[1]=x;
              ans+=x;
              minn=x;
              for (int i=2;i<=n;i++)
              {
                  a[i]=(a[i-1]*379+131)%997;
                  minn=min(minn,a[i]);
                  ans+=minn;
              }
              cout<<ans;
              return 0;
          }
          
          • -5
            @ 2022-4-24 16:51:54

            写题解请注意

            鼓励大家写题解,但注意题解格式。

            题解一定要有思路解析或代码注释,能否让别人理解你的思路

            也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

            给代码两端加上这个会舒服一些

            ```cpp

            你的代码

            ```

            </span>

            这个点在键盘的左上角tab上面那个键,注意切换输入法

            #include<iostream>
            using namespace std;
            int main()
            {
                int n;
                cin>>n;//这是一个注释
                return 0;
            } 
            

            请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

            抄袭题解一经发现直接取消成绩。

            题解被删除的可能

            1. 代码不符合格式规范
            2. 没有思路讲解或者没有注释,
            3. 无意义的题解

            大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

            • 1

            信息

            ID
            647
            时间
            1000ms
            内存
            16MiB
            难度
            3
            标签
            递交数
            184
            已通过
            101
            上传者