[CodeForces-545A]题解(C++)

Part I Preface

原题目(Luogu)
原题目(CodeForces)

Part II Sketch

  • 给定一个正整数 \(n\),表示汽车数量。
  • 给定一个 \(n \times n\) 阶矩阵 \(A\),第 \(i\)\(j\) 列上的数字表示 \(i\) 车与 \(j\) 车的对撞情况。
  • \(\begin{aligned}\begin{cases}A_{i,j} = -1 & i,j\text{ 车没有对撞}\\A_{i,j} = 0 & i,j\text{ 车没有翻车}\\A_{i,j} = 1 & i\text{ 车翻车}\\A_{i,j} = 2 & j\text{ 车翻车}\\A_{i,j} = 3 & i,j\text{ 车均翻车}\end{cases}\end{aligned}\)
  • 求出没有翻车的数量,和它们的编号。

Part III Analysis

输入矩阵,判断每个元素对应的情况,并且设定一个 bool 数组确定每辆车的情况,最后输出即可。

Part IV Code

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
int N;
int arr1[MAXN][MAXN];
bool arr2[MAXN];
int ans;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> N;
    for(int i = 1; i <= N; i++){
        for(int j = 1;j <= N;j++){
            cin>>arr1[i][j];
            if(arr1[i][j] == 1 && !arr2[i]){
                arr2[i] = true;
                ans++;
            }else if(arr1[i][j] == 2 && !arr2[j]){
                arr2[j] = true;
                ans++;
            }else if(arr1[i][j] == 3){
                if(!arr2[i]){
                    arr2[i] = true;
                    ans++;
                }
                if(!arr2[j]){
                    arr2[j] = true;
                    ans++;
                }
            }
        }
    }
    cout << N - ans << '\n';
    for(int i = 1; i <= N; i++){
        if(!arr2[i]) cout << i << ' ';
    }
    return 0; 
}

Part V Record


Record

posted @ 2023-05-05 19:16  -沉默-  阅读(45)  评论(0)    收藏  举报