团体程序设计天梯赛-练习集 - L1-049. 天梯赛座位分配(20 分)

简介: 团体程序设计天梯赛-练习集 - L1-049. 天梯赛座位分配(20 分)

题目链接:题目链接


题目大意:略


解题思路:模拟题(16分的天坑),16分的童鞋:关键在于,3 4 2; 3 3 4 3; 3 1 1; 观察这几组,最后一个学校的剩余的队伍的第一个队伍的第一个数据是致命点,如果是从其他学校转过来的计算开始,应该+1即可,而不是+2;如果是从当前学校转过来的计算开始,应该+2。


AC 代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int a[n],b[n],cnt[n]={0},maxn=INT_MIN,flag=1;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            b[i]=a[i];
            a[i]*=10;
            if(maxn<a[i])
                maxn=a[i];
        }
        if(n==1) // 1的特殊情况
        {
            printf("#1\n");
            int from=-1;
            for(int i=0;i<b[0];i++)
            {
                for(int j=0;j<10;j++)
                {
                    if(j==0)
                        printf("%d",from+=2);
                    else
                        printf(" %d",from+=2);
                }
                puts("");
            }
            continue;
        }
        sort(b,b+n);
        if(b[n-1]==b[n-2])
            flag=0;
        vector<int> v[n];
        int last=1;
        int k=1,tmax=b[n-2]*10;
        for(int j=0;j<maxn;j++)
        {
            for(int i=0;i<n;i++)
            {
                if(a[i]>cnt[i])
                {
                    cnt[i]++;
                    if(cnt[i]>tmax && flag==1)
                    {
                        if(last) // 高能!高能!16分的同学看过来,这里第一开始需要特殊处理,i.e. 3 3 1   3 3 4 3   3 4 2
                        {
                            if(k-v[i][tmax-1]!=1)
                                k--;
                            last=0;
                        }
                        k++;
                        v[i].push_back(k++);
                    }
                    else
                        v[i].push_back(k++);
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            printf("#%d\n",i+1);
            int count=0;
            for(int j=0;j<a[i];j++)
            {
                if(count==0)
                    printf("%d",v[i][j]);
                else
                    printf(" %d",v[i][j]);
                count++;
                if(count>=10)
                    puts(""),count=0;
            }
        }
    }
    return 0;
}


目录
相关文章
团体程序设计天梯赛-练习集L2篇⑦
团体程序设计天梯赛-练习集L2篇⑦
78 0
团体程序设计天梯赛-练习集L2篇⑨
团体程序设计天梯赛-练习集L2篇⑨
169 0
|
Perl
团体程序设计天梯赛-练习集L1篇③
团体程序设计天梯赛-练习集L1篇③
139 0
|
测试技术
团体程序设计天梯赛-练习集L2篇⑥
团体程序设计天梯赛-练习集L2篇⑥
117 0
|
测试技术 C语言 C++
PTA团体程序设计天梯赛-练习集:L1-003 个位数统计
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。 输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。 输出格式: 对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
221 0
|
算法
团体程序设计天梯赛-模拟赛(下)
团体程序设计天梯赛-模拟赛(下)
495 0
团体程序设计天梯赛-模拟赛(下)
|
机器学习/深度学习 程序员 Python
团体程序设计天梯赛-模拟赛(上)
团体程序设计天梯赛-模拟赛
738 0
团体程序设计天梯赛-模拟赛(上)
|
算法 安全 定位技术
团体程序设计天梯赛(上)
团体程序设计天梯赛
450 0
团体程序设计天梯赛(上)
|
存储 大数据
团体程序设计天梯赛(下)
团体程序设计天梯赛(下)
402 0
团体程序设计天梯赛(下)
PTA团体程序设计天梯赛-练习集 L2 网红点打卡攻略(模拟)
PTA团体程序设计天梯赛-练习集 L2 网红点打卡攻略(模拟)
179 0