zoukankan      html  css  js  c++  java
  • SRM DIV2 569 TheDeviceDiv2

    【题意】根据一些输入串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

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

  • 相关阅读:
    蓝桥杯历届试题 打印十字图 文字图形
    Cuckoo Hashing
    2006 飞行员配对(二分图最大匹配)
    Bad Hair Day(求数组中元素和它后面离它最近元素之间的元素个数)
    2019CCPC江西省赛
    字典树系统学习
    ac自动机学习
    项目管理(把与某点相邻边分为两类 是复杂度降为(n^(3/2))
    Ultra-QuickSort(离散化)
    Chika and Friendly Pairs(莫队+树状数组+离散化+预处理上下界)
  • 原文地址:https://www.cnblogs.com/wang3/p/3223821.html
Copyright © 2011-2022 走看看