题解:P10228 [COCI 2023/2024 #4] Bingo

· · 题解

P10228 [COCI 2023/2024 #4] Bingo 题解

题意

n 名玩家,每名玩家都有一个 5×5 的格板,每格包含一个整数。主持人从滚轮中取出球。取出编号为 x_i 的球后,如果格板上有取出的球的编号,将这个数从格板上划去。统计取出第 m 个球后划去了行、列、主对角线或从对角线上全部的 5 个数字的玩家个数及他们的名字。

思路

因为格板较小,考虑大模拟,输入完成后挨个判断 5 行,5 列以及 2 条对角线全部划去的玩家。

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,t=0;
bool f[60]={};
struct Bingo{
    string s;
    int a[6][6];
}q[60];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>q[i].s;
        for(int j=1;j<=5;j++){
            for(int k=1;k<=5;k++){
                cin>>q[i].a[j][k];
            }
        }
    }
    cin>>m;
    for(int i=1;i<=m;i++){
        int x;
        cin>>x;
        for(int j=1;j<=n;j++){
            for(int k=1;k<=5;k++){
                for(int l=1;l<=5;l++){
                    if(x==q[j].a[k][l]){
                        q[j].a[k][l]=-1;
                    }
                }
            }
        }
    }
    for(int j=1;j<=n;j++){
        /*if(q[j].a[1][1]==-1&&q[j].a[1][2]==-1&&q[j].a[1][3]==-1&&q[j].a[1][4]==-1&&q[j].a[1][5]==-1){t++;f[j]=true;}
        else if(q[j].a[2][1]==-1&&q[j].a[2][2]==-1&&q[j].a[2][3]==-1&&q[j].a[2][4]==-1&&q[j].a[2][5]==-1){t++;f[j]=true;}
        else if(q[j].a[3][1]==-1&&q[j].a[3][2]==-1&&q[j].a[3][3]==-1&&q[j].a[3][4]==-1&&q[j].a[3][5]==-1){t++;f[j]=true;}
        else if(q[j].a[4][1]==-1&&q[j].a[4][2]==-1&&q[j].a[4][3]==-1&&q[j].a[4][4]==-1&&q[j].a[4][5]==-1){t++;f[j]=true;}
        else if(q[j].a[5][1]==-1&&q[j].a[5][2]==-1&&q[j].a[5][3]==-1&&q[j].a[5][4]==-1&&q[j].a[5][5]==-1){t++;f[j]=true;}
        else if(q[j].a[1][1]==-1&&q[j].a[2][1]==-1&&q[j].a[3][1]==-1&&q[j].a[4][1]==-1&&q[j].a[5][1]==-1){t++;f[j]=true;}
        else if(q[j].a[1][2]==-1&&q[j].a[2][2]==-1&&q[j].a[3][2]==-1&&q[j].a[4][2]==-1&&q[j].a[5][2]==-1){t++;f[j]=true;}
        else if(q[j].a[1][3]==-1&&q[j].a[2][3]==-1&&q[j].a[3][3]==-1&&q[j].a[4][3]==-1&&q[j].a[5][3]==-1){t++;f[j]=true;}
        else if(q[j].a[1][4]==-1&&q[j].a[2][4]==-1&&q[j].a[3][4]==-1&&q[j].a[4][4]==-1&&q[j].a[5][4]==-1){t++;f[j]=true;}
        else if(q[j].a[1][5]==-1&&q[j].a[2][5]==-1&&q[j].a[3][5]==-1&&q[j].a[4][5]==-1&&q[j].a[5][5]==-1){t++;f[j]=true;}
        else if(q[j].a[1][1]==-1&&q[j].a[2][2]==-1&&q[j].a[3][3]==-1&&q[j].a[4][4]==-1&&q[j].a[5][5]==-1){t++;f[j]=true;}
        else if(q[j].a[1][5]==-1&&q[j].a[2][4]==-1&&q[j].a[3][3]==-1&&q[j].a[4][2]==-1&&q[j].a[5][1]==-1){t++;f[j]=true;}十二组判断*/
    }
    cout<<t<<endl;
    for(int i=1;i<=n;i++){
        if(f[i]){
            for(int j=0;j<=q[i].s.size()-1;j++){
                cout<<q[i].s[j];
            }
            cout<<endl;
        }
    }
    return 0;
}