7 条题解

  • 12
    @ 2024-2-23 14:54:06
    题解
    点赞带走
    AC代码
    #include<bits/stdc++.h>
    using namespace std;
    long long a, b, m, n, t;
    int main()
    {
    cin >> t;
    for (int i = 0;i < t;i++)
    {
    cin >> a >> b >> n >> m;
    if (b * (m + 1) < a * m)
    {
    cout<< b * n << endl;
    }
    else if (b < a)
    {
    cout << n / (m + 1) * m * a + n % (m + 1) * b << endl;
    }
    else
    {
    cout << (n - n / (m + 1)) * a << endl;
    }
    }
    return 0;
    }
    
    • 12
      @ 2023-7-6 16:24:31

      分三种情况讨论:

      1. 第二天买m+1公斤,比第一天买m公斤的花费还少:此时全都在第二天买。
      2. 不满足条件1,但是b比a小:此时先尽量多地在第一天买重量是m的倍数的苹果,并拿到赠送,然后剩下的在第二天买。
      3. 不满足条件1和条件2:此时全部在第一天买。

      核心代码
      
      if (b * (m + 1) < a * m) {
          cout << b * n << endl;
      } else if (b < a) {
          cout << n / (m + 1) * m * a + n % (m + 1) * b << endl;
      } else {
          cout << (n - n / (m + 1)) * a << endl;
      }
      

      • 6
        @ 2023-7-27 16:00:51

        只需要找到两个特例,就很容易解决

        #include <iostream>
        using namespace std;
        int main(void){
            long long t,a,b,n,m,ans;           //数值很大,要用long long
            cin>>t;
            for(int i=1;i<=t;i++){
                ans=0;
                cin>>a>>b>>n>>m;
                if(a*m/(double)(m+1)>=b) //如果无论如何第一天都比第二天贵,就把m设为“无限”
                    m=0xFFFFFFFFFFFF;
                if(a<b)                                 //特例:第一天单价小于第二天
                    b=a;
                while(n>0){                          //实际上顶多只需要执行两次
                    if(n>=m+1){
                        ans+=n/(m+1)*m*a;
                        n%=m+1;
                    }
                    else{
                        ans+=n*b;
                        n=0;
                    }
                }
                cout<<ans<<endl;
            }
            return 0;
        }
        
        • 2
          @ 2024-2-21 11:21:30

          记得点赞~~~~~~~~~~~~~~~

          代码
          #include <bits/stdc++.h>
          using namespace std;//宏定义,但我觉得long long不加unsigned也能过
          #define ll unsigned long long
          ll n,a,b,m,cost;
          int t;
          int main()
          {
          cin >> t;
          for (int i = 1;i <= t;i++)
          {
          cost = 0;//每一组数据都需初始化
          cin >> a >> b >> n >> m;
          if (a * m < b * (m+1))//如果第一天方案合适
          {//这里用乘法原因是除法可能会出小数
          int x;
          x = n / (m+1);
          cost += x * m * a;//先把能买的套装买下
          x = n % (m+1);
          if (a < b)//如果单买第一天也便宜
          {
          cost += x * a;//第一天结束
          }
          else
          {
          cost += x * b;
          }
          }
          else
          {
          cost = b * n;//如果第二天稳稳胜过第一天
          }
          cout << cost << endl;
          }
          return 0;
          }
          
          
          
          • -1
            @ 2024-3-14 13:32:05

            老毕登我又又又又来了

            思路 很简单,也就是

            ①第一天花m斤的钱,第二天需要(m+1)斤的钱。直接if(b*(m+1)<a*m)

            ②也就是第一个条件不满足,但第二天便宜,很无奈,就尽可能多买第一天的(m+1)斤。

            ③都不满足,直接全部买第一天。

            代码
            #include <bits/stdc++.h>
            #define ll long long
            using namespace std;                                                                                                                    反作弊                                 反作弊                                   反作弊                              反作弊               反作弊                                             反作弊
            ll t, a, b, n, m;                                                                                                             反作弊                                            反作弊反作弊反作弊反作弊                               反作弊反作弊                                    反作弊反作弊                           反作弊  反作弊                                                      
            int main(){                                                                                                                  反作弊                                                                                                                                                                                                                                                                                       反作弊
                cin >> t;                                                                                                                                                                                                                                                                                                                                                                                                                                                              反作弊
                while(t--){
                    cin>>a>>b>>n>>m;                                                                                                                                                                                                                             反作弊                                                              反作弊                                           反作弊
                    if (b*(m+1)<a*m){                                                                                                             反作弊                                                                                                                            反作弊                                
                        cout<<b*n<<endl;
                    }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                反作弊                               反作弊
                    else if(b<a){
                        cout<<n/(m+1)*m*a+n%(m+1)*b<<endl;
                    }                                                                                                                      反                 作弊                       反作弊                                                                                                                                                                                                                                 反作弊
                    else{
                        cout<<(n-n/(m+1))*a<<endl;
                    }                                                                                                                                                                                                                                                                                                       反作弊                    反作弊                                                                                                   反作弊
                }
                return 0;
            }
            

            食用的小伙伴注意啊,不要噎死

            • -8
              @ 2023-7-26 20:10:18
              #include <bits/stdc++.h>
              using namespace std;
              long long t,n,a,m,b;
              int main()
              {
                  cin >> t;
                  for(int i=1;i<=t;i++)
                  {
                      cin >> a >> b >> n >> m;
                      if (b * (m + 1) < a * m) {
                          cout << b * n << endl;
                      } else if (b < a) {
                          cout << n / (m + 1) * m * a + n % (m + 1) * b << endl;
                      } else {
                          cout << (n - n / (m + 1)) * a << endl;
                      }
                  }
              
              }
              
            • -8
              @ 2023-7-26 19:45:20

              `

              #include <bits/stdc++.h>
              using namespace std;
              long long t,n,a,m,b;
              int main()
              {
                  cin >> t;
                  for(int i=1;i<=t;i++)
                  {
                      cin >> a >> b >> n >> m;
                      if (b * (m + 1) < a * m) {
                          cout << b * n << endl;
                      } else if (b < a) {
                          cout << n / (m + 1) * m * a + n % (m + 1) * b << endl;
                      } else {
                          cout << (n - n / (m + 1)) * a << endl;
                      }
                  }
              
              }
              
              • 1

              信息

              ID
              256
              时间
              1000ms
              内存
              256MiB
              难度
              2
              标签
              (无)
              递交数
              663
              已通过
              409
              上传者