⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2970962_wa.cpp

📁 北大大牛代码 1240道题的原代码 超级权威
💻 CPP
字号:
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

struct node
{
	int id, len;
	int goal, goaled;
	int pt, pl;
	int won, tie, los;
	char name[101];
};

node team[81];

struct Node
{
	int a, b;
};

Node res[81][81];
int hold[81][81];
int n, m, maxlen;

bool cmp(node a,node b)
{
	if(a.pt!=b.pt)
		return a.pt>b.pt;
	if(a.goal-a.goaled!=b.goal-b.goaled)
		return a.goal-a.goaled>b.goal-b.goaled;
	if(a.goal!=b.goal)
		return a.goal>b.goal;
	if(a.won!=b.won)
		return a.won>b.won;
	return a.id>b.id;
}

int get_id(char name[])
{
	int i;

	for(i = 0; i < n; i++)
		if(strcmp(name,team[i].name)==0)
			return i;
	return -1;
}

void print()
{
	int j;

	putchar('+');
	for(j = 0; j < maxlen; j++)
		putchar('-');
	putchar('+');
	for(j = 0; j < n; j++)
		printf("---+");
	putchar('\n');
}

int min(int n1,int n2)
{
	return n1 < n2 ? n1 : n2;
}

int lenth(int num)
{
	return int(log10(num))+1;
}

int main()
{
	int i, j;
	int l, r, tmp;
	int ida, idb;
	char a[101], b[101], t[2];
	int plmax, wmax, tmax, ptmax, lmax, totmax;

	while(scanf("%d",&n),n)
	{
		maxlen = -1;
		plmax = wmax = tmax = ptmax = lmax = totmax = -1;
		memset(hold,0,sizeof(hold));
		for(i = 0; i < n; i++)
		{
			scanf("%s",team[i].name);
			tmp = strlen(team[i].name);
			team[i].len = tmp;
			if(tmp > maxlen)
				maxlen = tmp;
			team[i].id = i;
			team[i].pt = team[i].pl = 0;
			team[i].goal = team[i].goaled = 0;
			team[i].won = team[i].los = team[i].tie = 0;
		}
		scanf("%d",&m);
		for(i = 0; i < m; i++)
		{
			scanf("%s%s%s",a,t,b);
			ida = get_id(a);
			idb = get_id(b);
			hold[ida][idb] = 1;
			scanf("%d:%d",&l,&r);
			res[ida][idb].a = l;
			res[ida][idb].b = r;
			team[ida].pl ++;
			team[idb].pl ++;
			team[ida].goal += l;
			team[ida].goaled += r;
			team[idb].goal += r;
			team[idb].goaled += l;
			if(l > r)
			{
				team[ida].pt += 3;
				team[ida].won ++;
			}
			else
				if(l == r)
				{
					team[ida].pt ++;
					team[idb].pt ++;
					team[ida].tie ++;
					team[idb].tie ++;
				}
				else
				{
					team[idb].pt += 3;
					team[idb].won ++;
					team[ida].los ++;
				}
		}
		puts("RESULTS:");
		print();
		putchar('|');
		for(j = 0; j < maxlen; j++)
			putchar(' ');
		putchar('|');
		for(j = 0; j < n; j++)
		{
			tmp = min(team[j].len,3);
			for(i = 0; i < tmp; i++)
				putchar(team[j].name[i]);
			for(i = 0; i < 3-tmp; i++)
				putchar(' ');
			putchar('|');
		}
		putchar('\n');
		print();
		for(i = 0; i < n; i++)
		{
			putchar('|');
			printf("%s",team[i].name);
			for(j = 0; j < maxlen - team[i].len; j++)
				putchar(' ');
			putchar('|');
			for(j = 0; j < n; j++)
			{
				if(i==j)
					printf(" X ");
				else
					if(hold[i][j])
						printf("%d:%d",res[i][j].a,res[i][j].b);
					else
						printf("   ");
				putchar('|');
			}
			printf("\n");
			print();
		}
		puts("\nSTANDINGS:\n----------");
		sort(team,team+n,cmp);
		for(i = 0; i < n; i++)
		{
			if(team[i].pl > plmax)	plmax = team[i].pl;
			if(team[i].pt > ptmax)	ptmax = team[i].pt;
			if(team[i].won > wmax)	wmax = team[i].won;
			if(team[i].los > lmax)	lmax = team[i].los;
			if(team[i].tie > tmax)	tmax = team[i].tie;
			if(lenth(team[i].goal)+lenth(team[i].goaled)+1 > totmax)	totmax = lenth(team[i].goal)+lenth(team[i].goaled)+1;
		}
		plmax = lenth(plmax);
		ptmax = lenth(ptmax);
		lmax = lenth(lmax);
		tmax = lenth(tmax);
		wmax = lenth(wmax);
		for(i = 0; i < n; i++)
		{
			if(n > 9 && i < 10)
				putchar(' ');
			printf("%d. %s",i+1,team[i].name);
			for(j = 0; j < maxlen-team[i].len; j++)
				putchar(' ');
			putchar(' ');
			tmp = lenth(team[i].pl);
			for(j = 0; j < plmax-tmp; j++)
				putchar(' ');
			printf("%d",team[i].pl);
			putchar(' ');
			tmp = lenth(team[i].won);
			for(j = 0; j < wmax-tmp; j++)
				putchar(' ');
			printf("%d",team[i].won);
			putchar(' ');
			tmp = lenth(team[i].tie);
			for(j = 0; j < tmax-tmp; j++)
				putchar(' ');
			printf("%d",team[i].tie);
			putchar(' ');
			tmp = lenth(team[i].los);
			for(j = 0; j < lmax-tmp; j++)
				putchar(' ');
			printf("%d",team[i].los);
			putchar(' ');
			tmp = lenth(team[i].goal)+lenth(team[i].goaled)+1;
			for(j = 0; j < totmax-tmp; j++)
				putchar(' ');
			printf("%d:%d",team[i].goal,team[i].goaled);
			putchar(' ');
			tmp = lenth(team[i].pt);
			for(j = 0; j < ptmax-tmp; j++)
				putchar(' ');
			printf("%d",team[i].pt);
			putchar('\n');
		}
		putchar('\n');
	}
	return 0;
}

⌨️ 快捷键说明

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