网易的<塔>那道题,一种不一样的思路;AC

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int n,m;
    while (cin >> n>>m)
    {
        int cnt = 1;
        vector<pair<int, int>> higher;
        vector<pair<int, int>> data;
        while (n--)
        {
            
            int high;
            cin >> high;
            pair<int,int> hh;
            hh.first = high;
            hh.second = cnt;
            cnt++;
            higher.push_back(hh);
        }
        sort(higher.begin(), higher.end());
        int count = 0;
        while (m--)
        {
            if ((higher.front().first == higher.back().first)||
                ((higher.front().first+1) == higher.back().first))
                break;
            pair<int, int> dd;
            higher.back().first--;
            higher.front().first++;
            dd.first = higher.back().second;
            dd.second = higher.front().second;
            data.push_back(dd);
            sort(higher.begin(), higher.end());
            count++;

        }
        cout << higher.back().first - higher.front().first
            << " " << count << endl;
        for (auto i : data)
        {
            cout << i.first << " " << i.second << endl;
        }
    }
    return 0;
}

#网易#
全部评论
是在编程界面ac了吗?那看来就是最大塔需要大下标的问题了。。。
点赞
送花
回复
分享
发布于 2018-08-11 18:21
if ((higher.front().first == higher.back().first)&&                 ((higher.front().first+1) == higher.back().first))
点赞
送花
回复
分享
发布于 2018-08-11 19:16
蔚来
校招火热招聘中
官网直投
import java.util.Scanner; public class xxx {     public static void main(String[] args) {              Scanner sc = new Scanner(System.in);         int n = sc.nextInt();         int k = sc.nextInt();         int MAX = 0,MIN = 10001;         int MAXx = 0 ,MINy = 0;         int k1 = k;         int [][] num = new int[k][2];         int [] nu = new int[n];         for (int i = 0; i < n; i++) {             nu[i] = sc.nextInt();             MIN = MIN>nu[i]?nu[i]:MIN;             MAX = MAX<nu[i]?nu[i]:MAX;         }         if(MAX!=MIN){             while(k1-->0){                 for (int i = 0; i < n; i++) {                     if(MAX<=nu[i]){                         MAX = nu[i];                         MAXx = i;                     }                     if(MIN>=nu[i]){                         MIN = nu[i];                         MINy = i;                     }                 }                 if(MAX!=MIN){                                          MIN = --nu[MAXx];                     MAX = ++nu[MINy];                     num[k-(k1+1)][0] = MAXx+1;                     num[k-(k1+1)][1] = MINy+1;                                      }else{                     break;                 }             }             MAX = 0;             MIN = 10001;             for (int i = 0; i < n; i++) {                 MIN = MIN>nu[i]?nu[i]:MIN;                 MAX = MAX<nu[i]?nu[i]:MAX;             }             System.out.println((MAX-MIN)+" "+(k-(k1+1)));             for (int i = 0; i < k; i++) {                 System.out.println(num[i][0]+" "+num[i][1]);             }         }else{             System.out.println("0"+" "+"0");         }     } }
点赞
送花
回复
分享
发布于 2018-08-23 22:28

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务