5 条题解

  • 6
    @ 2022-9-14 21:08:51
    #include <bits/stdc++.h>
    using namespace std;
    
    struct P
    {
        int a,b;
    }s[5];
    
    bool check(P q,P p)
    {
        if(p.b !=q.b)return q.b<p.b;
        else
            return q.a<p.a;
    }
    
    int main()
    {
        int n;
        cin >> n;
        for(int i = 1;i<=3;i++)
        {
            cin >> s[i].a >> s[i].b;
            int x=s[i].a,y=s[i].b;
            while(s[i].a<n)
            {
                s[i].a+=x;
                s[i].b+=y;
            }
        }
        sort(s+1,s+4,check);
        cout<<s[1].b;
    }
    //总体来说还挺简单的?上课讲了的,如果懒得去翻就看我的吧
    //已AC,点个赞吧
    
    </span>
    • 2
      @ 2022-10-1 20:55:45

      太简单了吧

      实际3行代码

      #include<bits/stdc++.h>

      using namespace std;

      int main(){

      ** int n,a1,b1,a2,b2,a3,b3;**

      ** cin>>n>>a1>>b1>>a2>>b2>>a3>>b3;**

      ** cout<<min({int(ceil(1.0n/a1)b1),int(ceil(1.0n*/a2)b2),int(ceil(1.0n/a3)b3)});*

      ** return 0;**

      }

      • 2
        @ 2022-9-23 21:38:04

        题前吐槽

        这题也太简单了吧,就是个 O(1)O(1),楼下还要个带cmp的sort!!! 楼下这是当成不定数量的吗?怎么弄也比那个简单啊!这叫总体简单!!!其实有了ceil就不用模拟一袋一袋的买了。

        题解

        这题太简单了,没得说,就是输入,然后模拟三个价格,注意因为购买数量只有是最小的大于 nn 的数才有可能花费最少(用ceil)。

        科普ceil

        ceil就是一个函数,传入小数,传出比该小数大或等于的最小整数。 举例子: ceil(5.25) = 6 ceil(7.00) = 7 ceil(4.011) = 5

        ACAC CodeCode

        #include <bits/stdc++.h>
        using namespace std;
        int n, a1, a2, a3, b1, b2, b3;
        int c1, c2, c3;
        int main()
        {
            scanf("%d%d%d%d%d%d%d", &n, &a1, &b1, &a2, &b2, &a3, &b3);
            c1 = ceil(1.0 * n / a1) * b1;
            c2 = ceil(1.0 * n / a2) * b2;
            c3 = ceil(1.0 * n / a3) * b3;
            printf("%d\n", min(c1, min(c2, c3)));
            return 0;
        }
        

        延伸与拓展

        如果把题目修改一下呢?比如说有 kk 个包装的铅笔(2k10002 \le k \le 1000),总不能还手动吧…… 观察一下代码,会发现神似,只有a1、b1、c1之类的需要改,妥妥的循环啊!

        #include <bits/stdc++.h>
        using namespace std;
        int n, k, a, b, c, ans = 1e9; // 都可以不用数组了,因为和下一个没关系
        int main()
        {
            scanf("%d%d", &n, &k);
            for (int i = 1; i <= k; i++)
            {
                scanf("%d%d", &a, &b);
                c = ceil(1.0 * n / a) * b; // 核心
                ans = min(ans, c); // 求值
            }
            printf("%d\n", ans);
            return 0;
        }
        

        时间复杂度 O(k)O(k),空间复杂度不用数组 O(1)O(1)。 如果 k109k \le 10^9,那么基本上都可以,但是注意如果 nnbb 等过大,需要开 long long。

        • 1
          @ 2024-5-12 19:07:48

          hetao28428387

          LV 9

          P1392[入门][NOIP2016普及组]买铅笔

          代码:

          #include<bits/stdc++.h>
          using namespace std;
          int main(){
          int a,b,c,d,e,f,g,h,i,j;cin>>a>>b>>e>>c>>f>>d>>g;
          h=ceil(1.0*a/b)*e;
          i=ceil(1.0*a/c)*f;
          j=ceil(1.0*a/d)*g;
          cout<<min(h,min(i,j));
          return 0;
          }
          

          • 0
            @ 2024-6-13 20:56:24

            秘制

            #include <bits/stdc++.h>
            using namespace std;
            int n,num,price,ans=INT_MAX,t;
            int main(){
            	scanf("%d",&n);
            	for(int i=1;i<=3;i++){
            		scanf("%d%d",&num,&price);
            		if(n%num==0) t=n/num*price;
            		else t=(n/num+1)*price;
            		ans=min(ans,t);
            	}
            	cout<<ans;
            	return 0;
            }
            
            
            • 1

            [入门][NOIP2016 普及组] 买铅笔

            信息

            ID
            1392
            时间
            1000ms
            内存
            256MiB
            难度
            5
            标签
            递交数
            556
            已通过
            229
            上传者