2020.1.1 大一寒假集训
结构体排序
使用sort函数快排结构体。
#include<bits/stdc++.h>
using namespace std;
struct student
{
char id[10];
double score;
};
struct student a[100];
bool cmp(student a,student b)
{
if(a.score>b.score)
{
return true;
}
return false;
}
int main()
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i].id>>a[i].score;
}
sort(a,a+n,cmp);
cout<<a[k-1].id<<" ";
printf("%g\n",a[k-1].score);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[501];
int N;
cin>>N;
for(int i=0;i<N;i++)
{
cin>>a[i];
}
sort(a,a+N);
for(int i=0;i<N;i++)
{
if(a[i]%2!=0)
{
if(i!=N-2)
{
cout<<a[i]<<",";
}
else
{
cout<<a[i];
}
}
}
cout<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
struct student
{
char name[20];
int score;
};
struct student a[30];
bool cmp2(student a,student b)
{
if(a.score!=b.score)
{
return a.score>b.score;
}
else
{
return a.name<b.name;
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i].name>>a[i].score;
}
sort(a,a+n,cmp2);
for(int i=0;i<n;i++)
{
cout<<a[i].name<<" "<<a[i].score<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
bool cmp3(int a,int b)
{
return a>b;
}
int main()
{
int n,k;
int a[1000]={0};
cin>>n>>k;
int sum=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,cmp3);
for(int i=0;i<k;i++)
{
sum=sum+a[i];
}
cout<<sum<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
struct he
{
int c;
int gs;
int xd;
int eng;
int sum;
int id;
};
bool cmp1(he a,he b)
{
if(a.sum!=b.sum)
{
return a.sum>b.sum;
}
else if(a.sum==b.sum)
{
if(a.c!=b.c)
{
return a.c>b.c;
}
else if(a.c==b.c)
{
if(a.xd!=b.xd)
{
return a.xd>b.xd;
}
else if(a.xd==b.xd)
{
if(a.gs!=b.gs)
{
return a.gs>b.gs;
}
else if(a.gs==b.gs)
{
if(a.eng!=b.eng)
{
return a.eng>b.eng;
}
else
{
return a.id<b.id;
}
}
}
}
}
}
struct he a[100];
int main()
{
int n;
while(cin>>n)
{
memset(a,0,sizeof(a));
for(int i=0; i<n; i++)
{
cin>>a[i].c>>a[i].xd>>a[i].gs>>a[i].eng;
a[i].id=i+1;
}
for(int i=0; i<n; i++)
{
a[i].sum=a[i].c+a[i].gs+a[i].xd+a[i].eng;
}
sort(a,a+n,cmp1);
for(int i=0; i<n; i++)
{
cout<<a[i].id<<" "<<a[i].sum<<endl;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
struct shang
{
char name[105];
int sum;
};
bool comp(shang a,shang b)
{
if(a.sum!=b.sum)
{
return a.sum>b.sum;
}
}
bool comp2(shang a,shang b)
{
if(a.sum!=b.sum)
{
return a.sum<b.sum;
}
}
int main()
{
int M,N,O;
cin>>N>>M>>O;
struct shang a[N];
for(int i=0;i<N;i++)
{
cin>>a[i].name>>a[i].sum;
}
sort(a,a+N,comp);
for(int i=0;i<M;i++)
{
sort(a,a+M,comp2);
cout<<a[i].name<<endl;
}
sort(a,a+N,comp2);
for(int i=0;i<O;i++)
{
cout<<a[i].name<<endl;
}
return 0;
}
这题有坑,看他给的对应关系。
#include<bits/stdc++.h>
using namespace std;
struct sg
{
int dy;
int zy;
int wy;
double sum;
char name[100];
};
bool cmp1(sg a,sg b)
{
if(a.sum!=b.sum)
{
return a.sum>b.sum;
}
else if(a.sum==b.sum)
{
if(a.zy!=b.zy)
{
return a.zy>b.zy;
}
else if(a.zy==b.zy)
{
if(a.dy!=b.dy)
{
return a.dy>b.dy;
}
else if(a.dy==b.dy)
{
return a.wy>b.wy;
}
}
}
}
struct sg a[100005];
int main()
{
memset(a,0,sizeof(a));
int t;
cin>>t;
for(int j=0;j<t;j++)
{
int n;
cin>>n;
double x,y,z;
cin>>x>>y>>z;
x=x*0.01;
y=y*0.01;
z=z*0.01;
for(int i=0; i<n; i++)
{
cin>>a[i].name>>a[i].zy>>a[i].dy>>a[i].wy;
}
for(int i=0; i<n; i++)
{
a[i].sum=a[i].zy*y+a[i].dy*x+a[i].wy*z;
}
sort(a,a+n,cmp1);
cout<<"Case"<<" "<<"#"<<j+1<<":"<<endl;
for(int i=0; i<n; i++)
{
cout<<a[i].name<<" ";
printf("%.4f %.4f %.4f %.4f\n",a[i].sum,a[i].zy*y,a[i].dy*x,a[i].wy*z);
}
}
return 0;
}
没A出来的题不算罚时,然后判断要写!=-1.
#include<bits/stdc++.h>
using namespace std;
struct acm
{
char name[20];
int aca,acat;
int acb,acbt;
int acc,acct;
int sum;
int counter;
};
struct acm a[100005];
bool px(const acm a,const acm b)
{
if(a.counter!=b.counter)
{
return a.counter>b.counter;
}
else if(a.counter==b.counter)
{
return a.sum<b.sum;
}
}
int main()
{
int n;
while(cin>>n)
{
memset(a,0,sizeof(a));
for(int i=0; i<n; i++)
{
cin>>a[i].name>>a[i].aca>>a[i].acb>>a[i].acc;
}
for(int i=0; i<n; i++)
{
cin>>a[i].acat>>a[i].acbt>>a[i].acct;
}
for(int i=0; i<n; i++)
{
if(a[i].aca!=-1)
{
a[i].counter++;
a[i].sum=a[i].aca+(a[i].acat-1)*20+a[i].sum;
}
else if(a[i].aca==-1)
{
a[i].sum=a[i].sum;
}
if(a[i].acb!=-1)
{
a[i].counter++;
a[i].sum=a[i].acb+(a[i].acbt-1)*20+a[i].sum;
}
else if(a[i].acb==-1)
{
a[i].sum=a[i].sum;
}
if(a[i].acc!=-1)
{
a[i].counter++;
a[i].sum=a[i].acc+(a[i].acct-1)*20+a[i].sum;
}
else if(a[i].acc==-1)
{
a[i].sum=a[i].sum;
}
}
sort(a,a+n,px);
for(int i=0; i<n; i++)
{
cout<<a[i].name<<" "<<a[i].counter<<" "<<a[i].sum<<endl;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
struct point
{
int x;
int y;
};
bool px1(const point a,const point b)
{
if(a.x!=b.x)
{
return a.x>b.x;
}
else if(a.x==b.x)
{
return a.y<b.y;
}
}
bool px2(const point a,const point b)
{
if(a.x!=b.x)
{
return a.x>b.x;
}
else if(a.x==b.x)
{
return a.y>b.y;
}
}
bool px3(const point a,const point b)
{
if(a.x!=b.x)
{
return a.x<b.x;
}
else if(a.x==b.x)
{
return a.y>b.y;
}
}
bool px4(const point a,const point b)
{
if(a.x!=b.x)
{
return a.x<b.x;
}
else if(a.x==b.x)
{
return a.y<b.y;
}
}
struct point a[100];
int main()
{
int n;
int q,w;
while(cin>>q>>w)
{
memset(a,0,sizeof(a));
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i].x>>a[i].y;
}
if(q==0&&w==0)
{
sort(a,a+n,px2);
}
else if(q==0&&w==1)
{
sort(a,a+n,px1);
}
else if(q==1&&w==0)
{
sort(a,a+n,px3);
}
else if(q==1&&w==1)
{
sort(a,a+n,px4);
}
for(int i=0; i<n; i++)
{
cout<<'('<<a[i].x<<','<<a[i].y<<')'<<endl;
}
}
return 0;
}
桶排序
上面的升级版,普通排序会超时;
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main()
{
int n,k,t;
cin>>n>>k;
memset(a,0,sizeof(a));
long long sum=0;
for(int i=1;i<=n;i++)
{
cin>>t;
a[t]++;
}
for(int i=100000,j=0;i>0;i--)
{
while(a[i]--&&k>0) //把桶中的数拿出来加到和里,同时满足桶中有数,还有拿的次数。
{ //我上铺的大佬教的。
sum=sum+i;
k--;
}
}
cout<<sum<<endl;
return 0;
}
第二天成功AC,蒟蒻在成长。
过几天专门写一个初级的结构体排序。