2 条题解
-
0
60 分
- 每个数暴力查找前面的数,时间复杂度为
- 每输入一个数就使用
sort()
排序一次,时间复杂度为 ,即
100 分
考虑到这题 范围比较小,可以使用计数排序,时间复杂度 ,对于这题即
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";
-
0
开心的人数
大致题意:一堆学生挨个进入教室,如果当前教室里面的人当中,分数比他小的人数>=分数比他大的人数,那么她就是开心的。
(感觉不符合三好学生、四好少年的基本自我要求)思路:采用计数排序,从他的分数开始在数组里扫两遍(从前到他的分数,从末尾到他的分数),比他小的总和人数如果大于比他大的总和人数,那么sum增加,最后输出sum。
上代码
#include<bits/stdc++.h> using namespace std; int js[110],n,sum,maxx; bool pd(int x) { int sum1=0,sum2=0; for(int i=1;i<x;i++) sum1+=js[i]; //扫一遍比他小的 for(int i=101;i>x;i--) sum2+=js[i]; //扫一遍比他大的 if(sum1>=sum2) return 1; else return 0; } int main() { cin>>n; for(int i=1;i<=n;i++) { int ls; cin>>ls; //读入当前这个人 js[ls]++; //计数 if(pd(ls)==1) //判断是否开心 sum++; } cout<<sum; return 0; }
- 1
信息
- ID
- 1125
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 76
- 已通过
- 21
- 上传者