CF244A Dividing Orange 题解

Description

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

Solution

在输入 \(a_i\) 时就把其分配到 \(ans[i][1]\),随后将剩余 \(n\times(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;
}

完结撒花!!

posted @ 2023-01-13 11:15  larryyu_blog  阅读(20)  评论(1编辑  收藏  举报