海贼007

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

【题意】根据一些输入串plates[i],推断设备在每一位上的运算逻辑是OR,AND还是XOR,如果可以明确推断出,return "YES",否则 return "NO"。

【分析】刚开始自己搞得有点复杂,下面是某位大神的分析:

  显然位与位之间互相独立,那么单独考虑一位,这是只有三种输入:(0,0),(0,1),(1,1)。能区别AND和OR的有(0,1);能区别AND和XOR的有(0,1)和(1,1);能区别OR和XOR的有(1,1)。只要分别统计M个串中每一位0和1的个数,再判断一下即可.

【算法】:
1.分别统计每一位的0和1的个数。至少需要2个1和1个0。
2.判断能否推断。

【Java代码】来自菜鸟

 1 import java.util.*;
 2 import java.util.regex.*;
 3 import java.text.*;
 4 import java.math.*;
 5 
 6 
 7 public class TheDeviceDiv2
 8 {
 9     public String identify(String[] plates)
10     {
11         int one,zero;
12         int i,j;
13         
14         for(i=0;i<plates[0].length();i++){
15             one=zero=0;
16             for(j=0;j<plates.length;j++){
17                 if(plates[j].charAt(i)=='1')
18                     one++;
19                 else
20                     zero++;
21             }
22             if(one<2||zero<1)
23                 return "NO";
24         }
25         return "YES";
26     }
27     
28 
29 }
30 //Powered by KawigiEdit 2.1.4 (beta) modified by pivanof!
View Code

【Java代码】来自大神

import java.util.*;
import java.util.regex.*;
import java.text.*;
import java.math.*;
 
 
public class TheDeviceDiv2
{
  public String identify(String[] plates)
  {
    for (int i = 0; i < plates[0].length(); i++) {
      int onecount = 0;
      int zerocount = 0;
      for (int j = 0; j < plates.length; j++) {
        if (plates[j].charAt(i) == '0') zerocount++;
        else onecount++;
      }
      if (!(onecount >= 2 && zerocount >= 1)){
        return "NO";
      }
    }
    return "YES";
  }
  
 
}
//Powered by KawigiEdit 2.1.4 (beta) modified by pivanof!
View Code

【C++代码】来自大神

#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <climits>
 
using namespace std;
 
class TheDeviceDiv2 {
public:
  string identify(vector <string> p) {
    for(int j=0;j<p[0].length();j++){
      int o=0,z=0;
      for(int i=0;i<p.size();i++){
        if(p[i][j]=='1')o++;
        else z++;
      }
      if(o>=2&&z>=1)continue;
      else return "NO";
    }
    return "YES";
  }
};
 
 
 
//Powered by KawigiEdit 2.1.8 (beta) modified by pivanof!
View Code

【总结】:大神的方法都是一样的,看来这道题也是到经典题。

 

posted on 2013-07-29 20:08  wzhscript  阅读(216)  评论(0编辑  收藏  举报