Flag Day 题解

· · 题解

题目简意:

有 n 个人,m 个三人队伍,小组要求每个人的衣服颜色不同,问每个人该穿什么颜色的衣服。

题目思路:

贪心,可以开布尔数组记录。对于每个队伍,如果一个人已经记录衣服的颜色,就将这个人记录一下。否则就记录为上一个没用过的颜色。

AC 代码:

#include<bits/stdc++.h>//万能头文件 
using namespace std;
#define int long long//define 宏定义 int 为 long long 
int a[10010][5],b[10010];//千万不能开10005,否则你的第7点会RE
bool c[5];
signed main(){//要把int换成signed,不然会编译错误 
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=3;j++)cin>>a[i][j];
    }
    for(int i=1;i<=m;i++){
        memset(c,false,sizeof(c));//memset初始化定义d数组为false 
        for(int j=1;j<=3;j++){
            c[b[a[i][j]]]=true;//记录 
        }
        for(int k=1;k<=3;k++){
            if(!b[a[i][k]]){//给未记录数字分配 
                for(int l=1;l<=3;l++){
                    if(!c[l]){
                        b[a[i][k]]=l;
                        c[l]=1;
                        break;//找到后继续下一个 
                    }
                }
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<b[i]<<" ";//记得输出空格,这个人忘记写了导致WA
    }
    return 0;
}