1 条题解

  • 0
    @ 2025-8-11 15:46:41

    O(N2)O(N^2) 模拟

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1010;
    int a[N];
    int main(){
    	int n, t; //n瓶水,倒t次 
    	cin >> n >> t;
    	for(int i = 1; i <= n; i++) cin >> a[i];
        if(n == 1){ //题目的特殊情况 
            for(int i = 1; i <= t; i++) cout << 1 << endl;
            return 0; //直接结束程序 
        }
    	while(t--){
    		int index, ma = -1; //index记录容量最大的瓶子下标,ma记录最大容量 
    		for(int i = 1; i <= n; i++){
    			if(a[i] > ma){
    				ma = a[i];
    				index = i; 
    			}
    		}
    		cout << index << endl; //输出瓶子的编号	
    		a[index] = 0; //瓶子的水都倒走了,容量清零 
    		
    		int k = ma / (n - 1); //其他每个瓶子增加的容量 
    		for(int i = 1; i <= n; i++) 
    			if(i != index) a[i] += k;
    		
    		ma = ma % (n - 1); //计算剩下的水的容量 
    		for(int i = 1; i <= n; i++){
    			if(ma == 0) break; //倒完了就退出循环 
    			if(i == index) continue;
    			a[i]++;
    			ma--;
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    508
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    1
    上传者