12 条题解

  • 22
    @ 2021-8-8 13:53:08

    此题若使用暴力方法只能得到60分

    可以使用带含义的数组,或者说计数排序,每输入一个数,用数组计录当前数字出现的次数,因为题目说了最大数字不超过100,完全可以从1遍历到这个数字看积分值小于它的和是多少,再从它遍历到100看积分值大于它的和是多少,比较一下就可以了判断这个同学是不是开心的了~

    #include <bits/stdc++.h> 
    using namespace std;
    
    int n,minn,maxx,x,ans,a[105];
    
    int main()
    {
    	cin >> n;
    	for(int i=1;i<=n;i++)
    	{
    		minn = maxx = 0;
    		cin >> x;
    		a[x]++;
    		for(int j=1;j<x;j++)
    		{
    			minn += a[j];
    		}
    		for(int j=x+1;j<=100;j++)
    		{
    			maxx += a[j];
    		}
    		ans += minn>=maxx;
    	}
    	cout << ans;
    	return 0;
    }
    
    • 3
      @ 2021-8-4 10:15:34

      60 分

      • 每个数暴力查找前面的数,时间复杂度为 O(n2)O(n^2)
      • 每输入一个数就使用 sort() 排序一次,时间复杂度为 O(n×nlogn)O(n\times n\log{n}),即 O(n2logn)O(n^2\log{n})

      100 分

      考虑到这题 aia_i 范围比较小,可以使用计数排序,时间复杂度 O(max(ai)×n)O(max(a_i)\times n),对于这题即 100n100n

      for (int i = 1; i <= n; i++)
              cin >> a[i];
          int ans = 0;
          for (int i = 1; i <= n; i++)
          {
              cnt[a[i]]++;
              int nowr = 0, nowl = 0;
              for (int j = a[i] + 1; j <= 100; j++)
                  nowr += cnt[j];
              for (int j = 1; j <= a[i] - 1; j++)
                  nowl += cnt[j];
              ans += (nowr <= nowl);
          }
          cout << ans << "\n";
      
      • 2
        @ 2023-9-4 19:00:05

        这是本蒟蒻发的第一篇题解

        此题通过饼图的一片紫就引起了我的TLE预感,but看到数据中最大数字仅仅是100,我就知道这题可以用计数排序!注释在代码里,亲测AC,尽管食用。

        #include <bits/stdc++.h>
        using namespace std;
        int n,sum[101],ans,maxx;
        //sum数组统计每个数出现的次数,maxx只是个不必要的优化,统计当前最大数字,for循环可以少循环几遍,ans为最终答案
        int main()
        {
            cin >> n;
            for (int i = 1;i <= n;i++)
            {
                int a,minn = 0,maxn = 0;//初始化
                cin >> a;
                maxx = max(maxx,a);//统计当前最大数字
                sum[a]++;//a出现次数+1
                for (int j = 1;j < a;j++)
                    minn += sum[j];//比当前人分数低的人数
                for (int j = a + 1;j <= maxx;j++)
                    maxn += sum[j];//比当前人分数高的人数
                ans += minn >= maxn;//若比当前人分数高的人数不超过比当前人分数低的人数,则结果为真,返回值是1,否则为0
            }
            cout << ans;
            return 0;
        }
        
        • -1
          @ 2022-8-28 19:58:25

          ai数据范围小,可以直接用数组统计

          for (int i=1;i<=n;i++)
              {
                  int x;
                  cin>>x;
                  int sum1=0,sum2=0;
                  a[x]++;
                  for (int j=1;j<x;j++)
                  {
                      sum1+=a[j];
                  }
                  for (int j=x+1;j<=100;j++)
                  {
                      sum2+=a[j];
                  }
                  if (sum1>=sum2)
                  {
                      gx++;
                  }
              }
          
          • -3
            @ 2023-10-16 18:48:27

            #include <bits/stdc++.h> using namespace std; long long sum[10000001]; //以防超时 int main() { int n,min,max,x; long long ans=0; //还是以防超时 cin>>n; for(int i=1;i<=n;i++) { min=max=0; //min=max=0意思是这两个一起=0每次循环都要给这两归零 cin>>x; sum[x]++; //桶排序 for(int j=x+1;j<=100;j++) //用j=x+1是因为是x在进行桶排序,所以j=x+1是用来计算最大值的,而最小值可以直接用<号 { max+=sum[j]; //最大值累加 } for(int m=1;m<x;m++) { min+=sum[m]; //最小值累加 } ans+=min>=max; //把最后结果累加到ans上min>=max是为了省略一个if语句 } cout<<ans; //最后输出就可以了 return 0; }

            • -3
              @ 2023-10-15 11:08:21

              #include <bits/stdc++.h> using namespace std; int n,minn,maxx,x,sum,a[1001]; int main() { cin >> n; for(int i=1;i<=n;i++) { minn=maxx=0; cin >> x; a[x]+=1; for(int j=1;j<=x-1;j++) { minn+=a[j]; } for(int j=x+1;j<=101;j++) { maxx+=a[j]; } sum+=minn>=maxx; } cout << sum; return 0; }//已AC

              • -4
                @ 2022-4-24 16:53:37

                写题解请注意

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

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

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

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

                ```cpp

                你的代码

                ```

                </span>

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

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

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

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

                题解被删除的可能

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

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

                • -5
                  @ 2023-10-17 22:33:46

                  100

                  • -5
                    @ 2023-10-17 0:38:11

                    #include <bits/stdc++.h> using namespace std; int n, ans, a[100005]; int main() { cin >> n; for (int i = 1;i <= n;i++) { cin >> a[i]; int k = 0; int p = 0; for (int j = 1;j < i;j++) { if (a[j] < a[i]) { k++; } else if (a[j] > a[i]) { p++; } } if (k >= p) { ans++; } } cout << ans; return 0; }

                    • -5
                      @ 2023-8-24 14:22:58

                      写题解请注意

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

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

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

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

                      ```cpp

                      你的代码

                      ```

                      </span>

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

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

                      Copy

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

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

                      题解被删除的可能

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

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

                      • -6
                        @ 2023-2-6 15:31:53

                        写题解请注意

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

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

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

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

                        ```cpp

                        你的代码

                        ```

                        </span>

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

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

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

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

                        题解被删除的可能

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

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

                        • -7
                          @ 2023-10-6 10:49:53

                          AC代码 image

                          • 1

                          信息

                          ID
                          1196
                          时间
                          1000ms
                          内存
                          256MiB
                          难度
                          5
                          标签
                          递交数
                          859
                          已通过
                          305
                          上传者