7 条题解

  • 2
    @ 2023-3-1 18:05:06

    那只能我来了

    #include <bits/stdc++.h>
    using namespace std;
    long long x, cnt, a[10];
    int main()
    {
    	x = getchar();
    	while (('A' <= x) and (x <= 'Z'))
    	{
    		if (x == 'O')
    			cnt += a[3];
    		if (x == 'H')
    			a[0]++;
    		if (x == 'A')
    			a[3] += a[2];
    		if (x == 'T')
    			a[2] += a[1];
    		if (x == 'E')
    			a[1] += a[0];
    		x = getchar();
    	}	
        cout << cnt;
        return 0;
    }
    
    • -3
      @ 2023-8-4 11:18:26

      环环相扣

      这题乍一看好像不简单,但其实想通了就不难。 如:

      • 题目要求的是HETAO的个数,而我们可以把它拆分成几步。
      1. 统计H个数。
      2. 统计HE个数。
      3. 统计HET个数。
      4. 统计HETA个数。
      5. 最后再统计HETAO个数。

      第二步

      第一步是简单,但是第二步怎么办呢?

      • 当我们遇到一个字符‘E’时,它能组成‘HE’的个数取决于‘H’的个数。
      • 如HHHE中遇到E时,前面有3个H,所以可以组成3个HE。
      • 这样,我们就成功统计出了HE的个数。
      • 如HHHEEE,遇到第一个E时,前面有3个H,所以HE的个数+3,后面两个也一样。

      第三步

      • 同样,当我们遇到T时,能组成HET的个数取决于前面HE的个数,前面有几个HE,那就能组成几个HET。
      • 如HHEETT,有4个HE,那么HET个数+4,有两个T,那就加两次4,所以HET个数有8个。

      四五步

      • 也是一样,遇到A时能组成HETA个数取决于前面HET个数,遇到O时,组成HETAO个数取决于HETA个数。
      • 这样,我们就成功统计出了HETAO个数。

      AC代码

      #include <bits/stdc++.h>
      using namespace std;
      int a[6];//分别统计H,HE.HET,HETAO个数
      int main()
      {
          string n;
          cin>>n;//输入字符串
          long long sum=n.length(),num=0;//num用于储存HETAO个数。
          for (int i=0;i<=sum-1;i++)
          {//遍历字符串。
              if (n[i]=='H')
                  a[1]++;
              //如果有H,H个数+1。
              else if (n[i]=='E')
                  a[2]+=a[1];
              //如果有E,HE个数+=H个数。
              else if (n[i]=='T')
                  a[3]+=a[2];
              //如果有T,HET个数+=HE个数。
              else if (n[i]=='A')
                  a[4]+=a[3];
              //如果有A,HETA个数+=HET个数。
              else if (n[i]=='O')
                  num+=a[4];
              //如果有O,HETAO个数+=HETA个数。
          }
          cout<<num;//输出HETAO个数。
          return 0;
      }
      
      • -3
        @ 2023-1-12 11:20:13

        请大家自己思考

      • -4
        @ 2022-2-27 12:46:01

        本道题还是要使用动态规划的相关知识解答!

        • -5
          @ 2022-12-27 15:29:39

          写题解请注意

          不鼓励大家写题解,但注意题解格式。

          题解一定不要有思路解析或代码注释,不让别人理解你的思路

          也不是你的能力的检验,要只放无意义的代码给大家复制,那就是做题的初心。

          给代码两端加上这个并不会舒服一些:

          ```cpp

          你的代码

          ```

          </span>

          这个点在键盘的左上角tab上面那个键,注意切换输入法

          #include<iostream>
          using namespace std;
          int main()
          {
              int n;
              cin>>n;//这是一个注释
              return 0;
          }
          

          Copy

          请注意严禁抄袭题解,写题解要只放代码,不需加上你的思路或代码注释。

          抄袭题解一经发现直接取消成绩。

          题解被删除的可能

          1. 代码符合格式规范
          2. 有思路讲解或者没有注释,
          3. 有意义的题解

          大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

        • -6
          @ 2022-6-30 14:33:03

          可以用动态规划

          • -9
            @ 2022-4-24 16:45:52

            写题解请注意

            鼓励大家写题解,但注意题解格式。

            题解一定要有思路解析或代码注释,能否让别人理解你的思路

            也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

            给代码两端加上这个会舒服一些

            ```cpp

            你的代码

            ```

            </span>

            这个点在键盘的左上角tab上面那个键,注意切换输入法

            #include<iostream>
            using namespace std;
            int main()
            {
                int n;
                cin>>n;//这是一个注释
                return 0;
            } 
            

            请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

            抄袭题解一经发现直接取消成绩。

            题解被删除的可能

            1. 代码不符合格式规范
            2. 没有思路讲解或者没有注释,
            3. 无意义的题解

            大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

            • 1

            信息

            ID
            1251
            时间
            1000ms
            内存
            256MiB
            难度
            4
            标签
            递交数
            164
            已通过
            76
            上传者