c++ - 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 中的所有内容进行编码。
解决方案
推荐阅读
- api - 如何断言自动化 selenium 仅在没有值的键上比较 json
- c# - 如何在子类中实现接口属性?
- node.js - Multer:如何使文件名与保存在数据库中的文件名相同
- arrays - 计算第一个数组中的元素小于或等于第二个数组python中的元素
- c# - Xamarin - 如何实际自定义滑块的厚度?
- reactjs - 如何确保使用 .then 调用和添加 API 数据
- php - 将 php 和 html 代码插入数据库,然后获取/获取它
- node.js - 如何在我们的后端同时启动 nodejs 服务器和下一个 js 应用程序?
- ubuntu-18.04 - 使用 slurm 在同一节点上同时运行多个作业
- android - 默认操作栏中的可点击 setIcon()/setLogo()