12 条题解
-
22
此题若使用暴力方法只能得到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
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";
-
2
这是本蒟蒻发的第一篇题解
此题通过饼图的一片紫就引起了我的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; }
-
-3
#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
#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
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
-
-5
#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
写题解请注意
鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
-
-6
写题解请注意
鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 1196
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 859
- 已通过
- 305
- 上传者