2022/6/28随笔

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

P1271 【深基9.例1】选举学生会 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
//计数排序,入过先统一录入,后期处理的发杂度太大
//现在输入种类比较少,可以对输入数据进行统计

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int const maxn=10005;
 5 int a[maxn];
 6 int n,m;
 7 int main()
 8 {
 9     cin>>n>>m;
10     int b;
11     for(int i=1;i<=m;i++)
12     {
13         cin>>b;
14         a[b]++;
15     }
16     for(int i=1;i<=n;i++)
17     {
18         for(int j=1;j<=a[i];j++)
19         {
20             cout<<i<<" ";
21         }
22     }
23     return 0;
24 }
复制代码

 

 

 

 //P1177 【模板】快速排序

P1177 【模板】快速排序 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=1e5+10;
 5 int a[maxn];
 6 int n;
 7 void qsort(int a[],int l,int r)
 8 {
 9     int i=l,j=r,flag=a[(l+r)/2],tmp;
10     while(i<=j)
11     {
12         while(a[i]<flag) i++;
13         while(a[j]>flag) j--;
14         if(i<=j)
15         {
16             tmp=a[i];
17             a[i]=a[j];
18             a[j]=tmp;
19             i++;
20             j--;
21         }
22     }
23     if(l<j) qsort(a,l,j);
24     if(r>i) qsort(a,i,r);
25 }
26 int main()
27 {
28     cin>>n;
29     for(int i=0;i<n;i++)
30     {
31         cin>>a[i];
32     }
33     qsort(a,0,n-1);
34     for(int i=0;i<n;i++)
35     {
36         cout<<a[i]<<" ";
37      } 
38      return 0;
39 }
复制代码

 

 

 

 

//P1923 【深基9.例4】求第 k 小的数

P1923 【深基9.例4】求第 k 小的数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
//分治,一边快排,一边缩小范围
//如果用分治,cin,cout只能过80%,必须提速

方法1:

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=5000005;
 5 int a[maxn];
 6 int n,k,ans=0;
 7 void findk(int l,int r)
 8 {
 9     int i=l,j=r,flag=a[(l+r)/2],tmp;
10     while(i<=j)
11     {
12         while(a[i]<flag) i++;
13         while(a[j]>flag) j--;
14         if(i<=j)
15         {
16             tmp=a[i];
17             a[i]=a[j];
18             a[j]=tmp;
19             i++;
20             j--;
21         }
22     }
23     if(k<=j) findk(l,j);
24     else if(k>=i) findk(i,r);
25     else 
26     {
27         cout<<a[j+1];
28         return;
29     }
30 }
31 int main()
32 {
33     ios::sync_with_stdio(false);
34     cin.tie(0);
35     cout.tie(0);
36     cin>>n>>k;
37     for(int i=0;i<n;i++)
38     {
39         cin>>a[i];
40     }
41     findk(0,n-1);
42     return 0;
43 }
复制代码

方法2:

//nth_element函数
//最小为第0小
//也要提速

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=5000000+10;
 5 int a[maxn];
 6 int n,k;
 7 int main()
 8 {
 9     ios::sync_with_stdio(false);
10     cin.tie(0);
11     cout.tie(0);
12     cin>>n>>k;
13     for(int i=0;i<n;i++)
14     {
15         cin>>a[i];
16     }
17     nth_element(a,a+k,a+n);
18     cout<<a[k]<<endl;
19     return 0;
20 }
复制代码

方法3:

//先快排序,再输出相应的值
//sort默认递增,全部排一遍平均时间复杂度太大,只能拿60%

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=5000000+10;
 5 int a[maxn];
 6 int n,k;
 7 int main()
 8 {
 9     ios::sync_with_stdio(false);
10     cin.tie(0);
11     cout.tie(0);
12     cin>>n>>k;
13     for(int i=0;i<n;i++)
14     {
15         cin>>a[i];
16     }
17     sort(a,a+n);
18     cout<<a[k]<<endl;
19     return 0;
20  } 
复制代码

 

 

 //P1059 [NOIP2006 普及组] 明明的随机数

P1059 [NOIP2006 普及组] 明明的随机数 - 洛谷 | 计算机科学教育新生态 (luogu.com.

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=105;
 5 int a[maxn],n;
 6 int main()
 7 {
 8     cin>>n;
 9     for(int i=0;i<n;i++)
10     {
11         cin>>a[i];
12     }    
13     sort(a,a+n);
14     int cnt=unique(a,a+n)-a;//unique返回的是第一个重复数据的地址,
15                             //减去首地址刚好是下标(有序个数) 
16     cout<<cnt<<endl;
17     for(int i=0;i<cnt;i++)
18     {
19         cout<<a[i]<<" ";
20     }
21     return 0;
22 }
复制代码

 

//P1093 [NOIP2007 普及组] 奖学金

P1093 [NOIP2007 普及组] 奖学金 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=350;
 5 struct node
 6 {
 7     int id;
 8     int sum;
 9     int china;
10 }a[maxn];
11 int n;
12 bool cmp(node x,node y)
13 {
14     if(x.sum!=y.sum) return x.sum>y.sum;
15     else if(x.china!=y.china) return x.china>y.china;
16     else return x.id<y.id; 
17 }
18 int main()
19 {
20     int b,c,d;
21     cin>>n;
22     for(int i=1;i<=n;i++)
23     {
24         a[i].id=i;
25         cin>>b>>c>>d;
26         a[i].china=b;
27         a[i].sum=b+c+d;
28     }
29     sort(a+1,a+n+1,cmp);
30     for(int i=1;i<=5&&n>=1;i++)
31     {
32         n--;
33         cout<<a[i].id<<" "<<a[i].sum<<endl;
34     }
35     return 0;
36 }
复制代码

 

 

//P1781 宇宙总统

P1781 宇宙总统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

//string的size和length没有任何区别 

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int n;
 5 struct node
 6 {
 7     int num;
 8     string str;
 9 }a[25];
10 bool cmp(node x,node y)
11 {
12     if(x.str.size()!=y.str.size()) return x.str.size()>y.str.size();
13     else return x.str>y.str;
14 }
15 int main()
16 {
17     cin>>n;
18     for(int i=1;i<=n;i++)
19     {
20         a[i].num=i;
21         cin>>a[i].str;
22     }
23     sort(a+1,a+n+1,cmp);
24     cout<<a[1].num<<endl;
25     cout<<a[1].str<<endl;    
26     return 0;
27 }
复制代码

 

 

//P2676 [USACO07DEC]Bookshelf B

P2676 [USACO07DEC]Bookshelf B - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=20010;
 5 int n,s,a[maxn],ans=0;
 6 bool cmp(int x,int y)
 7 {
 8     return x>y;
 9 }
10 int main()
11 {
12     cin>>n>>s;
13     for(int i=1;i<=n;i++)
14     {
15         cin>>a[i];
16     }
17     sort(a+1,a+n+1,cmp);
18     int j=1;
19     while(s>0)
20     {
21         s-=a[j];
22         ans++;
23         j++;
24     }
25     cout<<ans<<endl;
26     return 0; 
27 }
复制代码

 

 

//P1116 车厢重组

P1116 车厢重组 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
//计算换了几次
//可以用冒泡排序,统计交换次数

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=10005;
 5 int a[maxn],n,ans=0;
 6 int main()
 7 {
 8     int flag=1;
 9     cin>>n;
10     for(int i=1;i<=n;i++)
11     {
12         cin>>a[i];
13     }
14     for(int i=1;i<=n&&flag==1;i++)
15     {
16         flag=0;
17         for(int j=1;j<=n-1;j++)
18         {
19             if(a[j]>a[j+1])
20             {
21                 flag=1;
22                 swap(a[j],a[j+1]);
23                 ans++;
24             }
25         }
26     }
27     cout<<ans<<endl;
28     return 0;
29 }
复制代码

 

 

//P1152 欢乐的跳

P1152 欢乐的跳 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
//注意题目中说的是连续两个元素,那差值只有n-1个
//求出所有差值,排序后,和[1,n-1]作比较就可以了

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=1010;
 5 int n,a[maxn],b[maxn];
 6 int main()
 7 {
 8     cin>>n;
 9     for(int i=1;i<=n;i++)
10     {
11         cin>>a[i];
12     }
13     for(int i=1;i<=n-1;i++)
14     {
15         b[i]=abs(a[i]-a[i+1]);
16     }
17     sort(b+1,b+n);
18     for(int i=1;i<=n-1;i++)
19     {
20         if(b[i]-i!=0)
21         {
22             cout<<"Not jolly"<<endl;
23             return 0;
24         }
25     }
26     cout<<"Jolly"<<endl;
27     return 0;
28  } 
复制代码

 

 

 

//P1068 [NOIP2009 普及组] 分数线划定

P1068 [NOIP2009 普及组] 分数线划定 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=5005;
 5 int n,m,s,k;
 6 struct node
 7 {
 8     int num;
 9     int s;
10 }a[maxn];
11 bool cmp(node x,node y)
12 {
13     if(x.s!=y.s) return x.s>y.s;
14     else return x.num<y.num;
15 }
16 int main()
17 {
18     cin>>n>>m;
19     for(int i=1;i<=n;i++)
20     {
21         cin>>a[i].num;
22         cin>>a[i].s;
23     }
24     sort(a+1,a+n+1,cmp);
25     k=(int)(m*1.5);
26     s=a[k].s;
27     for(int i=k+1;i<=n;i++)
28     {
29         if(a[i].s==s)
30         k++;
31         else
32         break;
33     }
34     cout<<s<<" "<<k<<endl;
35     for(int i=1;i<=k;i++)
36     {
37         cout<<a[i].num<<" "<<a[i].s<<endl;
38     }
39     return 0;
40 }
复制代码

 

 

总之,今天的题目都是关于排序,补充了快排的模板和stl的两个函数:nth_element(第k大/小),unique(去掉重复元素)

题目整体难度也比较简单

 

posted @   格蕾  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示