PTA 1095 B

/ 最後に終了ララララララ涙が走ったおお
、私が実際におお年近くのために少し愚かな質問カードをシミュレートする
自動無視してください
/
無実のシミュレーションこの質問はあるの
1のためにソートされる
に従って、その後、非増加チケット昇順にランク付けスコアで
一度、千万人を完了して初期化
レベルはハードに対処するための文字があるので、私は...クラスそれらのRを()を使用して、
樽のものの2つの条件のため
に関数を書きます探している文字がデジタル電源を入れた後、
バケツに直接番号を、バケットが終了...良いスコアを保持
3のために、これは私がされた年、伝説のカードですおお
、私はいつもそれが対応する文字列で解決されると、初期化したいです配列は、配列は、人々の数が保存されても良いとして検査室、検査室の列の内側に保たれ、突然私の料理...料理叫びされてきた
ので、私賢く、とにかく、データではなく、数千万人にオンラインの暴力、およびダイレクト年末までに、ソートemmmを書くために、emmm、配列の検査室番号、検査室の寄託番号を有する店を見つけます...!
コード

#include <bits/stdc++.h>
using namespace std;
struct stu{
	string name;      //准考证号 
	int fen,ban,rank; //分数,考场编号,等级 
}sb[10004];
int ren[1005],de[1005];
int w[10005],ge[1005];
int r(char c) //得阶级斗争 
{
	if(c == 'T') return 3;
	if(c == 'A') return 2;
	if(c == 'B') return 1;
}
int db(string s) //得考场编号 
{
	int point = 0;
	for (int i = 0; i < 3; i++)
	{
		point = point*10+s[i]-'0';
	} 
	return point; 
}
int comp(stu a,stu b)
{
	if(a.rank == b.rank)
	{
		if(a.fen == b.fen) return a.name < b.name; //准考小优先 
		return a.fen > b.fen; //分高优先 
	} 
	return a.rank > b.rank ; // 阶级高优先 
} 
int comp2(int a,int b)
{
	if(ge[a] == ge[b]) return a < b; //人同班级编号小优先 
	return ge[a] > ge[b];  //人多优先 
} 
int main()
{
	int n,t;  string s;
	scanf("%d%d",&n,&t);
	for (int i = 0; i < n; i++)
	{
		cin>>s;  int b = db(s.substr(1,3));//得到考场号
		//printf("%d\n",b); 
		scanf("%d",&sb[i].fen);
		sb[i].name = s;
		sb[i].rank = r(s[0]); 
		sb[i].ban = b;
		ren[b]++; de[b] += sb[i].fen;
	}
	//初始化
	sort(sb,sb+n,comp);//按等级排序 
	for (int i = 1; i <= t; i++)
	{
		int what,b,ok = 0;  char c;
		scanf("%d",&what);
		if(what == 1)
		{
			scanf(" %c",&c);
			printf("Case %d: 1 %c\n",i,c);
			for (int j = 0; j < n; j++)
			{
				if(sb[j].name[0] == c)
				{ 
					ok  = 1;
					cout<<sb[j].name<<" "<<sb[j].fen<<endl;
				}
			}
			if(!ok) printf("NA\n");
		}
		else if(what == 2)
		{
			scanf("%d",&b);
			printf("Case %d: 2 %d\n",i,b);
			if(!ren[b]) printf("NA\n");
			else 		printf("%d %d\n",ren[b],de[b]);
		}
		else
		{
			int ws = 0;
			memset(w,0,sizeof(w));   
			memset(ge,0,sizeof(ge)); //记得初始化 
			cin >> s;
			printf("Case %d: 3 ",i); cout<<s<<endl;
			for (int j = 0; j < n; j++)
			{
				if(sb[j].name.substr(4,6) == s)
				{
					if(!ge[sb[j].ban])
					{
						w[ws++] = sb[j].ban;
					}
					ge[sb[j].ban]++;
				}
			} 
			if(!ws) printf("NA\n");
			else
			{
				sort (w,w+ws,comp2);
				for (int j = 0; j < ws; j++)
				{
					printf("%d %d\n",w[j],ge[w[j]]);
				}
			}
		}
	}
	return 0;
} 
公開された55元の記事 ウォンの賞賛1 ビュー2643

おすすめ

転載: blog.csdn.net/qq_37548017/article/details/102686255