7 条题解
-
0
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; }
信息
- ID
- 725
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 94
- 已通过
- 33
- 上传者