top1编程
← 返回题目
题解

【提高】买木头

1 条题解

  • 0
    @ 2026-7-29 0:15:40
    #include <bits/stdc++.h>
    using namespace std;
     
    int main(){
        int n,m,l_1,s_1,i,j;
        //记录n个商家每个商家的木头的长度和数量 
        int a[10010][2];
        int r;//最长木头长度 
        cin>>n>>m>>l_1>>s_1;
        //第一个商家木头长度和数量 
        a[1][1] = l_1;
        a[1][2] = s_1; 
        int max = a[1][1];//最长木头的长度  
        for(i = 2;i <= n;i++){
            a[i][1] = ((a[i - 1][1] * 37011 + 10193) % 10000) + 1;
            a[i][2] = ((a[i - 1][2] * 73011 + 24793) % 100) + 1;
             
            if(a[i][1] > max){
                max = a[i][1];
            }
        } 
        //计算在每个长度下各个商家能供多少根木头
        int c;//在每个长度下,各个供应商能供多少根木头 
        for(i = max;i >= 1;i--){
            c = 0;
            //循环每个供应商 
            for(j = 1;j <= n;j++){
                c += a[j][1] / i * a[j][2];
            } 
            //如果根数够 
            if(c >= m){
                r = i;
                break; 
            }
        } 
        cout<<r<<endl;
        return 0;
    }
    
    • 1