两TLE求助

P1271 【深基9.例1】选举学生会

可以用桶排序,最多共$999$个人。 ```cpp //a数组表示每个人的投票数量。 for(i=1;i<=n;i++)//访问每一个人。 for(j=1;j<=a[i];j++) cout<<i<<" ";//输出个数。 ```
by 2021zjhs005 @ 2023-10-13 18:04:42


此题可以用桶排 冒泡的复杂度在O(n^2),太大了 在不同的题目中可以视自己的需要来选择排序方法: ~~1.冒泡~~ ~~极其不建议使用~~ 2.桶排 大致是利用数组下标进行统计的排序 适用于数的大小范围小的排序 3.插排 即插入排序 在原来的有序数组基础上进行插入 类似于冒泡一遍 适合于需要一边插入数据一边处理的题目 3.快排 用sort函数就基本可以解决大部分的排序 4.堆排 插入数据的复杂度小于插排 调用的复杂度略大于插排 可以一边输入一边进行处理 ------------ 在绝大多数情况下快排就够了 具体的视情况而定
by liuqichen121 @ 2023-10-13 18:16:21


$O(m^2)$ 会 TLE 吧。
by BugGod @ 2023-10-13 18:20:31


其实最简单的就是一个sort解决,不过这么大的数据用sort也不一定过 而且冒泡可以优化 ~~虽然也不一定能过~~ 这么小的范围用桶排比较保险吧
by FXLIR @ 2023-10-13 18:47:17


```cpp #include<bits/stdc++.h> using namespace std; bool cmp(int a,int b) { return a<b; } int main() { int n,m; cin>>n>>m; int a[m]; for(int i=0;i<m;i++) { cin>>a[i]; } sort(a,a+m+1,cmp); for(int i=0;i<m;i++) { cout<<a[i]<<" "; } return 0; } ```
by yuanruikang @ 2023-10-14 16:00:58


用sort不就可以啦 ``` #include<bits/stdc++.h> using namespace std; int main(){ int n,m; cin>>n>>m; int a[m]; for(int i=0;i<m;i++){ cin>>a[i]; } sort(a,a+m); for(int i=0;i<m;i++){ cout<<a[i]<<" "; } return 0; } ```
by flh2011 @ 2023-10-24 19:31:44


@[FXLIR](/user/617688) sort可以过
by flh2011 @ 2023-10-24 20:35:06


??? ``` #include <bits/stdc++.h> using namespace std; const int N=2e6+6; int n,m,a[N]; int main(){ cin>>n>>m; for(int i=1;i<=m;i++) cin>>a[i]; sort(a+1,a+m+1); for(int i=1;i<=m;i++) cout<<a[i]<<" "; return 0; } ``` 简化一点,用sort就可以了
by panghanchen2012 @ 2023-11-08 21:08:19


|