L1-049ラダーマッチ座席割当
ラダーは、同じ学校のすべてのメンバーが隣接していないことを保証するために、割り当てられた座席が面倒なことになってきた、毎年チームメンバーの数が多いトーナメント。この目的のために、我々は次の戦略を開発しました:参加校はNを持ってスタジアムには、I-学校はM [i]のチーム、チームごとに10人の選手がいるとします。1つのファイルにすべての学校プレイヤーように、私は、チームの選手の後ろに1チームの選手を+。最初のAの学校からは、今度の学校第1プレイヤーは、その後、学校の最初の2人の選手......などに座りました。最後の唯一の学校のチームが席を割り当てられていない場合、あなたは座って選手たちのコンパートメントを手配する必要があります。この質問は、自動的に1から番号付け、学校のチームの座席番号を生成するプログラムを記述する必要があります。
入力フォーマット:
大学N(100を越えない正の整数)の所定の行数に参加する入力; Nの第2行は10を越えない正の整数を与え、前記iは、i番目の大学のチームに対応数は、数字の間のスペースで区切られています。
出力フォーマット:
順次選手の座席番号の出力を開始する最初のチームの大学から。行ごとの各チームは、スペースで区切られた座席番号の間で、最初から最後までのラインは、余分なスペースを持っていないかもしれません。また、学校Xの「#X」は出力数によって各大学の最初の行は1から始まります。
サンプル入力:
3
3 4 2
出力例:
#1
1 4 7 10 13 16 19 22 25 28
31 34 37 40 43 46 49 52 55 58
61 63 65 67 69 71 73 75 77 79
#2
2 5 8 11 14 17 20 23 26 29
32 35 38 41 44 47 53 56 59 50
62 64 66 68 70 72 74 76 78 80
82 84 86 88 90 92 94 96 98 100
#3
3 6 9 12 15 18 21 24 27 30
33 36 39 42 45 48 51 54 57 60
アイデア:(デポジット異なる要素)のSTLコンテナの使用(ベクトル)。
完全なコード:
#include<bits/stdc++.h>
using namespace std;
int a[105];
bool flag[105];
vector <int> Vec[105];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int ans=1;
int num=1;
while(num-1!=n)
{
for(int i=0;i<n;i++)
{
if(flag[i])
{
continue;
}
Vec[i].push_back(ans);
if(num==n)
{
ans+=2;
}
else
{
ans++;
}
int x=Vec[i].size();
if(x==a[i]*10)
{
num++;
flag[i]=1;
}
}
}
int bet=0;
for(int i=0;i<n;i++)
{
cout<<"#"<<i+1<<endl;
int x=Vec[i].size();
for(int j=0;j<x;j++)
{
bet++;
if(bet==10)
{
cout<<Vec[i][j]<<endl;
bet=0;
}
else
{
cout<<Vec[i][j]<<" ";
}
}
}
return 0;
}
元の質問へのリンク:
https://pintia.cn/problem-sets/994805046380707840/problems/994805081289900032