1 条题解

  • 0
    @ 2025-4-12 21:43:14

    C++ :

    #include <iostream>
    #include <map>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    const int N = 1000;
    int nums[N];
    int seats[N];
    
    
    
    int main()
    {
        int n, m, i;
        int sumNum, sumSeat;
        multimap<double, int> mm;
        double rest;
    
        while (cin>>n>>m)
        {
            sumNum = 0;        
            sumSeat = 0;
            mm.clear();
    
            for (i=0; i<n; i++)
            {
                cin>>nums[i];
                sumNum += nums[i];
            }
            
            
            for (i=0; i<n; i++)
            {            
                seats[i] = (m * nums[i]) / sumNum;
                sumSeat += seats[i];
    
                rest = (double)(m * nums[i]) / sumNum - seats[i];            
                mm.insert(pair<double, int>(rest, i));            
            }
            
            multimap<double, int>::reverse_iterator rit = mm.rbegin();
            while (sumSeat< m)
            {
                i = rit->second;
                seats[i]++;
    
                sumSeat++;
                rit++;
            }
            
            cout<<seats[0];
            for (i=1; i<n; i++)
                cout<<" " <<seats[i];
            cout<<endl;        
        }
        
        return 0;
    }
    

    Java :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while (in.hasNext()) {
    			int n = in.nextInt();
    			int[] nArray = new int[n];
    			int[] mArray = new int[n];
    			int[] newArray = new int[n];
    			int[] m2Array = new int[n];
    			double[] modArray = new double[n];
    			int sum = 0;
    			int m = in.nextInt();
    			for (int i = 0; i < n; i++) {
    				nArray[i] = in.nextInt();
    				sum += nArray[i];
    			}
    			int mSum = 0;
    			for (int i = 0; i < n; i++) {
    				mArray[i] = m * nArray[i] / sum;
    				newArray[i] = mArray[i];
    				mSum += mArray[i];
    				modArray[i] = (double) m * (double) nArray[i] / (double) sum
    						- (double) mArray[i];
    			}
    			int dis = m - mSum;
    			for (int i = 0; dis > 0; i++) {
    				double maxA = Double.MIN_VALUE;
    				int indexMax = 0;
    				for (int j = 0; j < n; j++) {
    					if (modArray[j] > maxA) {
    						maxA = modArray[j];
    						indexMax = j;
    					}
    				}
    				newArray[indexMax] = mArray[indexMax] + 1;
    				modArray[indexMax] = 0;
    				dis--;
    			}
    			for (int i = 0; i < n; i++) {
    				if (i != n - 1)
    					System.out.print(newArray[i] + " ");
    				else
    					System.out.println(newArray[i]);
    			}
    
    		}
    	}
    }
    
    • 1

    信息

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