首页 > 解决方案 > UVA 10249 或使用贪心算法的盛大晚宴

问题描述

所以我正在尝试完成一个名为“盛大晚宴”(uva 10249)的竞争性编程问题,由于我的临时列表,我在显示正确的输出时遇到了问题,有人可以帮我吗?当我打印cout << *(temp[j].t);它显示 7405056 而不是座位 [] 数组的值。这是完整的代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <cstdio>

using namespace std;

int M, N;

struct temp_type
{
    int t;
    int index;
} temp[51];

bool cmp(temp_type a, temp_type b)
{
    return a.t > b.t;
}

void assignTable(string input)
{
    int assign[71][100];
    bool valid = true;
    int members[M], seats[N]; // NO. OF MEMBERS, SEAT CAPACITY OF EACH TABLE
    
    for(int i = 0; i < M + N; i++)
    {
        int num; 
        
        if(i < M)
        {
            stringstream ss;  
            ss << input[i];  
            ss >> num;  
            members[i] = num;
        }   
        if(i < M + N && i >= M)
        {
            stringstream ss;  
            ss << input[i];  
            ss >> num;  
            seats[i] = num;
        }
    }
    
    
    for(int i = 0; i < M && valid; i++)
    {
        if(members[i] > N)
        {
            valid = false;
            break;
        }
        
        for(int j = 0; j < N; j++)
        {
            temp[j].t = seats[j];
            temp[j].index = j;
        }
        
        sort(temp, temp + N, cmp);
        
        int ans = 0;
        
        for(int j = 0; j < members[i]; j++)
        {

            if(temp[j].t <= 0)
            {
                valid = false;
                break;
            }
            else
            {
                temp[j].t--;
                assign[i][ans++] = temp[j].index;
            }
        }   
        sort(assign[i], assign[i] + ans);
    }
    
    if(valid)
    {
        cout << "1" << endl;
        
        for(int i = 0; i < M; i++)
        {
            for(int j = 0; j < members[i]; j++)
            {
                cout << assign[i][j] + 1;
            }
            cout << endl;
        }
    }
    else
    {
        cout << "0" << endl;
    }
}

需要注意的是,我们只允许使用这个模板来调用函数assignedTable(string input),所以我们需要将字符串作为输入,然后将它们解析为整数数组,我们只允许从main获取输入,我们不能允许对 main 中的所有内容进行编码。

标签: c++algorithmpointersstruct

解决方案


推荐阅读