题目传送门

太弱了,只能写写A题的题解

题意

给你一个 $n·n$ 的矩阵,翻车分三种情况:

  • 如果 $a_i,_j=1$ ,记录第 $i$ 辆车
  • 如果 $a_i,_j=2$ ,记录第 $j$ 辆车
  • 如果 $a_i,_j=3$ ,记录第 $i$ 和 $j$ 辆车
    问最后总共记录多少辆车(不重复)?它们分别是第几辆?

思路

这题可以用set (好喜欢用set),因为set可以去重,用在这里可以有效减少时间复杂度。
一边输入一边将 $i$ 或 $j$ 存入set并标记bool数组,然后输出 n-set的长度,最后再输出没有被标记的下标。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=110;
int n;
bool f[N];
int main() {
    memset(f,false,sizeof f);
    cin>>n;
    set<int> s;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {
            int x;
            cin>>x;
            if(x==1) {
                s.insert(i);
                f[i]=1;
            }
            else if(x==2) {
                s.insert(j);
                f[j]=1;
            }
            else if(x==3) {
                s.insert(i);
                s.insert(j);
                f[i]=f[j]=1;
            }
        }
    }
    cout<<n-(int)s.size()<<endl;
    for(int i=1;i<=n;i++) if(!f[i]) cout<<i<<" ";
    return 0;
}

版权声明:本文为Ryan-juruo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Ryan-juruo/p/12825365.html