栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

1017. 座位分配

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1017. 座位分配




思路:
这题目属于光看测试数据被吓死的,一开始以为很难,然后就一直没做,然后静下心来之后,发现只是输出看着多了点而已
用一个struct套一个队列
整个学校的队伍人数先看成一个整体这样比较好操作(我一开始是又分小组的,然后搞来搞去麻烦很多,看成一个整体的话,只要在输出的时候十个十个输出就行)
依次往学校的空位上放人就行,因为要判断最后剩下的是否只有一个学校,所以需要一个tot变量(所有学校还没被安排座位的队员)来辅助判断

#include 
#include 
using namespace std;
int n,tot,a[1111];
int maxx=-0x3f3f3f3f;
struct QUEUE
{
	int head,tail,data[11111];
	void init()
	{
		head=0,tail=0;
	}
	int size()
	{
		return tail-head;
	}
	int front()
	{
		return data[head];
	}
	int back()
	{
		return data[tail-1];
	}
	void pop()
	{
		head++;
	}
	void push(const int &x)
	{
		data[tail]=x;
		tail++;
	}
};
struct SCHOOL
{
	int num;
    QUEUE st;
}s[111];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
		maxx=max(x,maxx);
		a[i]=x;
		s[i].num=10*x;
		tot+=s[i].num;
    }
	int j=1;
	while(tot)
	{
		for(int i=1;i<=n;i++)
    	{
			if(s[i].num)
			{
				tot--;
				s[i].num--;
				if(tot==s[i].num)
				{
					s[i].st.push(j);
					j+=2;
				}
				else 
				{
					s[i].st.push(j);
					j++;
				}

			} 
    	}
	}
	for(int i=1;i<=n;i++)
	{
		cout<<"#"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311725.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号