5 条题解

  • 14
    @ 2023-8-1 19:17:28

    题目要求判断在一个2×n的网格中,是否存在一条路径可以从左上角(1, 1)走到右下角(2, n),并且路径上的每个格子都是0。

    解题思路:

    • 首先我们需要遍历每一列,检查是否存在某一列上下都为1的情况,如果存在,则无法从左上角到达右下角。
    • 如果不存在上下都为1的列,说明对于每一列,至少有一个格子是0,那么我们可以通过选择某一列的0格子来构成路径。
    • 因此,只要能够保证每一列至少有一个0格子,就可以从左上角出发,沿着0格子构成路径到达右下角。
    • 最后,根据是否存在上下都为1的列来输出结果。

    代码实现如下: PY:

    t = int(input())  # 读取测试数据组数
    
    for _ in range(t):
        n = int(input())  # 读取网格的列数
    
        # 读取网格的内容
        s1 = input()
        s2 = input()
    
        canReach = True
        for i in range(n):
            if s1[i] == '1' and s2[i] == '1':
                canReach = False
                break
        
        if canReach:
            print("YES")
        else:
            print("NO")
    

    C++:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        int t;
        cin >> t;
        
        while (t--) {
            int n;
            cin >> n;
            
            string s1, s2;
            cin >> s1 >> s2;
            
            bool canReach = true;
            for (int i = 0; i < n; i++) {
                if (s1[i] == '1' && s2[i] == '1') {
                    canReach = false;
                    break;
                }
            }
            
            if (canReach) {
                cout << "YES" << endl;
            } else {
                cout << "NO" << endl;
            }
        }
    
        return 0;
    }
    
    
    • 3
      @ 2024-2-25 12:50:07

      一定要用char或string来做,因为输入的网格格式上是连续的,用其他数据类型不可以!!!!!!!!!!! (切身经历)

      • 2
        @ 2023-11-11 20:17:33
        • 题目要求判断在一个2×n的网格中,是否存在一条路径可以从左上角(1, 1)走到右下角(2, n),并且路径上的每个格子都是0。
        • 意思:只要有一列全是1,那就无法通过

        1. 首先接收数据,可直接存为 string
        2. 遍历2个 string找出两列都是1的
        3. 按要求输出

        函数:

        string tongguo(int n,string x,string y){
            for(int i=0;i<n;i++){
                if(x[i]=='1' && y[i]=='1')return "NO";
            }return "YES";
        }
        

        main函数:

            cin>>t;
            for(int i=1;i<=t;i++){
                cin>>n;
                cin>>s1>>s2;
                cout<<tongguo(n,s1,s2)<<endl;
            }return 0;
        
        • 2
          @ 2023-7-23 17:07:41

          根据题意分析可知,如果某一列上下均为1,那么无法通过,其他情况均可通过。因此只要没有出现某一列上下均为1的情况,结果即为YES。

          核心代码
          
          bool ok = true;
          for (int i = 0; i < n; i++) {
              if (s1[i] == '1' && s2[i] == '1') {
                  cout << "NO" << '\n';
                  ok = false;
                  break;
              }
          }
          if (ok)
              cout << "YES" << '\n';
          
          • 0
            @ 2023-8-8 21:26:10

            只要有一列全是1,那就无法通过。 代码:

            #include <iostream>
            using namespace std;
            int t,n;
            string s1,s2;
            int main(void){
                cin>>t;
                for(int i=1;i<=t;i++){
                    cin>>n;
                    cin>>s1>>s2;
                    for(int j=0;j<n;j++)
                        if(s1[j]=='1'&&s2[j]=='1'){
                            cout<<"NO"<<endl;
                            goto ok; //跳转
                        }
                    cout<<"YES"<<endl;
                    ok:
                    __asm("nop"); //nop指令没有用,凑数
                }
                return 0;
            }
            
            • 1

            信息

            ID
            333
            时间
            1000ms
            内存
            256MiB
            难度
            1
            标签
            (无)
            递交数
            450
            已通过
            300
            上传者