1 条题解
-
0
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
- 上传者