侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【比赛】芯片测试

Allen Best
2023-07-21 / 0 评论 / 0 点赞 / 65 阅读 / 616 字
温馨提示:
本文最后更新于 2023-07-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

解析:1)好的芯片比坏的多。

2)坏的芯片无论检查好的还是坏的,都是随机的0或1(50%)

3)芯片不能检查自己,i=j时结果统一为1。
第j列就是其他芯片测试j的结果,题目中说好的好芯片的数量大于坏芯片的数量,那么我们就统计j列的数字1多点还是0多点,就可以判断芯片的好坏了

#include<iostream>
using namespace std;
int a[21][21];
int cnt[21];
int main()
{
    int n;
    cin>>n; //输入芯片个数
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i][j];   //输入每次芯片测试结果
            if(i!=j && a[i][j]==1){ 
                //自己对自己不能判断是否有效,
                //如果其他芯片判断当前芯片有效,cnt++
                cnt[j]+=1;
            }
        }
    }
    for(int i=1;i<=n;i++){
        if(cnt[i]>=n/2)
        //因为好的芯片多于坏的芯片,所以一个芯片被判断好的次数>=n/2时
        //说明确实是好的芯片
            cout<<i<<" ";//输出结果
    }
    return 0;
}
输入样例:
8
1 0 1 0 1 1 0 1
0 1 0 1 1 1 0 1
1 0 1 0 1 1 0 1
0 1 0 1 1 0 0 1
1 0 1 0 1 1 0 1
1 0 1 0 1 1 0 1
0 1 1 1 1 0 0 0
1 0 1 0 1 1 0 1
输出样例:
1 3 5 6 8
0

评论区