3 条题解

  • 2
    @ 2022-10-28 22:23:24
    #include<bits/stdc++.h>
    using namespace std;
    string a,b;
    int ans;
    int main(){
        ios::sync_with_stdio(false); // 输入输出加速
        cin.tie(0);
        cout.tie(0);
        cin>>a>>b;
        int len=a.size(); // 优化时间复杂度(效果不明显)
        for(int i=0;i<len-1;i++){
            if(a[i]!=b[i]){
                if(a[i]=='N')a[i]='S';
                else a[i]='N';
                if(a[i+1]=='N')a[i+1]='S';
                else a[i+1]='N';
                ans++;
            }
        }
        cout<<ans;
        return 0;
    }
    
    • 0
      @ 2021-8-23 13:52:29

      首先要明确两点:

      1.对于任意连着的两个同学来说,转一次以上都是没有意义的,因为转两次相当于没转,转三次相当于转了一次……

      2.题目说保证有解,那么我们就可以从前往后递推,首先对于第一个同学来说,如果他需要转变方向,那么只有他和第二个同学向后转这一种方法,将第一个同学安置好之后,继续往后看。第二个同学也是一样的,如果需要转向,只能是他和第三个同学一起转,以此类推……只需要判断到倒数第二个同学即可。代码的话就是模拟上面的一段过程,具体代码如下:

      #include <bits/stdc++.h>
      using namespace std;
      
      string a, b;
      
      int main() {
          cin >> a >> b;
          int ans = 0;
      
          for (int i = 0; i < a.size() - 1; i++) {
              if (a[i] != b[i]) {
                  ans ++;
      
                  if (a[i] == 'N')
                      a[i] = 'S';
                  else
                      a[i] = 'N';
      
                  if (a[i + 1] == 'N')
                      a[i + 1] = 'S';
                  else
                      a[i + 1] = 'N';
              }
          }
      
          cout << ans;
      
          return 0;
      }
      
      • -2
        @ 2021-8-22 18:24:52

        //用while循环不知道有没有用递推(100分) #include <iostream> using namespace std; string a, b; long long sum = 0, num = 0; int main() { cin >> a >> b;

        while (a != b) {
            num %= a.length();
        
            if (a == b) {
                break;
            }
        
            if (a[num] != b[num]) {
                int t = a[num];
                a[num] = b[num];
        
                if (a[num + 1] == 'S') {
                    a[num + 1] = 'N';
                    sum++;
                } else {
                    a[num + 1] = 'S';
                    sum++;
                }
            }
        
            num++;
        }
        
        cout << sum;
        return 0;
        

        }

        • 1

        信息

        ID
        1221
        时间
        1000ms
        内存
        256MiB
        难度
        4
        标签
        递交数
        191
        已通过
        85
        上传者