2802146_ac_593ms_468k.cpp

来自「北大大牛代码 1240道题的原代码 超级权威」· C++ 代码 · 共 72 行

CPP
72
字号
#include <stdio.h>
#include <algorithm>

using namespace std;

int n;
struct node
{
	int mark;
	char name[31];
}stu[10001];
int index[10001];

int cmp(const void *a,const void *b)
{
	node *aa = (node *)a;
	node *bb = (node *)b;

	return strcmp(aa->name,bb->name);
}

int Cmp(const void *a,const void *b)
{
	int aa = *(int *)a;
	int bb = *(int *)b;

	return stu[bb].mark-stu[aa].mark;
}

void report()
{
	while(1)
		puts("I LOVE YOU");
}

int main()
{
	int i, j, m, res, *q, *s, id, rank;
	node tmp, *p;

	scanf("%d",&n);
	getchar();
	for(i = 0; i < n; i++)
		gets(stu[i].name),stu[i].mark = 0;
	qsort(stu,n,sizeof(stu[0]),cmp);
	strcpy(tmp.name,"Li Ming");
	id = (p = (node *)bsearch((const void *)(&tmp),stu,n,sizeof(stu[0]),cmp))-stu;
	scanf("%d",&m);
	for(i = 0; i < m; i++)
	{
		for(j = 0; j < n; j++)
		{
			scanf("%d",&res);
			getchar();
			gets(tmp.name);
			p = (node *)bsearch((const void *)(&tmp),stu,n,sizeof(stu[0]),cmp);
			(*p).mark += res;
			index[j] = j;
		}
		qsort(index,n,sizeof(index[0]),Cmp);
		q = (int *)bsearch((const void *)(&id),index,n,sizeof(index[0]),Cmp);
		if (q==NULL)
			report();
		rank = q-index+1;
		s = q-1;
		while(s+1!=index&&stu[*s].mark==stu[*q].mark)
			s--,rank--;
		printf("%d\n",rank);
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?