1 条题解

  • 0
    @ 2023-6-11 12:18:10

    C++ :

    #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];
            }
        }
         
        //输出每个商家的木头的长度和数量 
    //  for(i = 1;i <= n;i++){
    //      cout<<a[i][1]<<" "<<a[i][2]<<endl;
    //  } 
         
        //计算在每个长度下各个商家能供多少根木头
        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;
    }
    
    

    Python :

    sr=input().split()
    n=int(sr[0])
    m=int(sr[1])
    a=[[0 for i in range(2)]for j in range(n)]
    a[0][0]=int(sr[2])
    a[0][1]=int(sr[3])
    for i in range(1,n):
        a[i][0]=(a[i-1][0]*37011+10193)%10000+1
        a[i][1]=(a[i-1][1]*73011+24793)%100+1
    s=0
    for i in range(n):
        s=s+a[i][0]*a[i][1]
    da=s/m
    l=1
    r=da
    da=int((l+r)//2)
    while(l<=r):
        s=0
        for i in range(n):
            s=s+(a[i][0]//da)*a[i][1]
        if(s>m):
            l=da+1
        elif(s<m):
            r=da-1
        else:
            break
        da=int((l+r)//2)
    print(da)
    
    
    • 1

    信息

    ID
    2477
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者