7 条题解

  • 0
    @ 2024-4-13 16:59:38

    1)好的芯片比坏的多。

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

    3)芯片不能检查自己,i=j时结果统一为1。

    这三个条件缺一不可,都会用到,汇聚成一句话:每个芯片都是被其他芯片检查过的,当芯片好的结果数 1>坏的结果数 0(或者说>(总数)/2),都说明芯片时好的,反正都是坏的。

    我的理由如下:好的芯片比坏的多,说明好的芯片至少比坏的多 1,同时每轮结果里面都要去掉 i=j 时,如果坏的芯片检查时,结果都是0(其实50%),然后好的芯片恰比坏的多1,那么在这种极端的情况下 有效的结果 好的:坏的刚好是1:1,那么实际上得1的结果肯定会比得0的多。

    还有要注意的:int half=n/2(得到的数并不是准确的一半,比如5/2=2),但是我们的条件是 >n/2(之前得到的结果数都是整数),就一定能保证大于一半。我可能说的比较拗口,但都是为了严格说明(芯片好的结果数 1>坏的结果数 0)的可行性。

    3.AC代码

    #include<iostream using namespace std; int main() { int n; cin>>n; int c=n/2; int b[n]={0}; int a[25][25]={0}; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>a[i][j]; if(a[i][j]==1)b[j]++; } } for(int i=0;i<n;i++)if(b[i]>c)cout<<i+1<<" "; return 0; }

    • @ 2024-7-17 10:43:07

      分析最准确、思路最清晰、最难被抄袭的一片题解👍

信息

ID
725
时间
1000ms
内存
256MiB
难度
5
标签
(无)
递交数
94
已通过
33
上传者