CF244A Dividing Orange 题解

管理员

Description

(ntimes k) 个橘子,(k) 个小朋友每人拿 (n) 个,但是每个人都指定了一个橘子 (a_i),分配时必须要把 (a_i) 给第 (i) 个小朋友,求任一分配方案。

Solution

在输入 (a_i) 时就把其分配到 (ans[i][1]),随后将剩余 (ntimes(k-1)) 依次放入 (ans) 数组中即可。

Code

#include <bits/stdc++.h>
using namespace std;
int n,k,fl;
int cnt;
bool vis[2500];
int ans[50][50];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>k;
    for(int i=1;i<=k;i++){
        cin>>ans[i][1];
        vis[ans[i][1]]=1;
    }
    fl=1;//fl枚举当前在分配橘子的小朋友
    cnt=1;//cnt枚举当前小朋友已经拿了的数量
    for(int i=1;i<=n*k;i++){
        if(vis[i]) continue;//判断是否拿过
        if(cnt==n){//这个判断语句要放在第25行前
            fl++;  //否则n=1时每人就有2个了
            cnt=1;
        }
        ans[fl][++cnt]=i;
        vis[i]=1;
    }
    for(int i=1;i<=k;i++){
        for(int j=1;j<=n;j++){
            cout<<ans[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

完结撒花!!