您的位置:首页 > 编程语言 > C语言/C++

【C++心路历程3】我终于写出来了 分治算法

2016-10-05 19:31 405 查看
#include<algorithm>

#include<cstdio>

#include<iostream>

#include<cstring>

using namespace std;

struct info

 {

  char no[10];

  char name[25];

  int yuwen;

  int shuxue;

  int yingyu;

  int wuli;

  int huaxue;

  int zongfen;

  int rank;

 };

char b[1002];

info a[50005];

int cmp(info a,info b)

{

  if(a.zongfen!=b.zongfen)

  {

   return a.zongfen>b.zongfen;

  }

  if(a.zongfen==b.zongfen&&a.yuwen!=b.yuwen)

  {

   return a.yuwen>b.yuwen;

  }

  if(a.zongfen==b.zongfen&&a.yuwen==b.yuwen&&a.shuxue!=b.shuxue)

  {

   return a.shuxue>b.shuxue;

  }

  return strcmp(a.no,b.no)==-1;

};

bool cmp2(info a,info b)

{

 return  strcmp(a.no,b.no)<0;

}

int main()

{

 //freopen("in.txt","r",stdin);

 //freopen("out.txt","w",stdout);

 int n,m;

 scanf("%d",&n);

 for(int i=1;i<=n;i++)

 {

  scanf("%s",a[i].no);

  scanf("%s%d%d%d%d%d",a[i].name,&a[i].yuwen,&a[i].shuxue,&a[i].yingyu,&a[i].wuli,&a[i].huaxue);

  a[i].zongfen=a[i].yuwen+a[i].shuxue+a[i].yingyu+a[i].wuli+a[i].huaxue;

 }

 

 sort(a+1,a+1+n,cmp);

 

 

 for(int i=1;i<=n;i++)

 {

  a[i].rank=i;

  printf("%d ",i);

  printf("%s ",a[i].no);

  printf("%s %d %d %d %d %d %d\n",a[i].name,a[i].yuwen,a[i].shuxue,a[i].yingyu,a[i].wuli,a[i].huaxue,a[i].zongfen);

 }

 printf("\n");

 

 

 int ans=0;info t;

 sort(a+1,a+1+n,cmp2);

 scanf("%d",&m);

 for(int k=1;k<=m;k++)

 {

  scanf("%s",t.no);

  int oi=lower_bound(a+1,a+1+n,t,cmp2)-a;

            if(strcmp(a[oi].no,t.no)==0)

            {                  

   printf("%d ",a[oi].rank);

   printf("%s ",a[oi].no);

   printf("%s %d %d %d %d %d %d\n",a[oi].name,a[oi].yuwen,a[oi].shuxue,a[oi].yingyu,a[oi].wuli,a[oi].huaxue,a[oi].zongfen);

            }

    

   else

   {

    printf("Can't found!\n");

   }

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: