結果
| 問題 |
No.447 ゆきこーだーの雨と雪 (2)
|
| ユーザー |
|
| 提出日時 | 2018-06-17 23:05:15 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 64 ms / 2,000 ms |
| コード長 | 1,824 bytes |
| コンパイル時間 | 1,442 ms |
| コンパイル使用メモリ | 92,488 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-30 16:39:28 |
| 合計ジャッジ時間 | 3,560 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 25 |
ソースコード
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int N;
vector<int> L;
struct GRADE{
char P;
int Order;
int Grade;
GRADE(char p){
P=p;
Order=0;
Grade=0;
}
void SetGrade(int order){
Order=order;
Grade=(int)(50*L[P-'A']+50*L[P-'A']/(0.8+0.2*Order));
}
};
struct PERSON{
int Index;
string Name;
vector<GRADE> Grade;
PERSON(int index,string name,char p,int gradeNum,int order){
Index=index;
Name=name;
for (int i=0;i<gradeNum;i++){
Grade.push_back(GRADE(i+'A'));
}
Grade[p-'A'].SetGrade(order);
}
void SetGrade(int index,char p,int order){
Index=index;
Grade[p-'A'].SetGrade(order);
}
void Print(){
cout<<Name<<" ";
int Sum=0;
for (int i=0;i<Grade.size();i++){
Sum+=Grade[i].Grade;
cout<<Grade[i].Grade;
cout<<" ";
}
cout<<Sum<<endl;
}
};
bool Comp2(PERSON &l,PERSON &r){
int Sum1=0,Sum2=0;
int i;
for (i=0;i<l.Grade.size();i++){
Sum1+=l.Grade[i].Grade;
}
for (i=0;i<r.Grade.size();i++){
Sum2+=r.Grade[i].Grade;
}
if (Sum1>Sum2){
return true;
}else if (Sum1==Sum2){
if (l.Index<r.Index){
return true;
}
}
return false;
}
int main(int argc, char* argv[])
{
cin>>N;
int i,j;
int l;
for (i=0;i<N;i++){
cin>>l;
L.push_back(l);
}
int T;
cin>>T;
vector<string> Name(T);
vector<char> P(T);
vector<int> order(N);
string name;
char p;
vector<PERSON> Person;
for (i=0;i<T;i++){
cin>>name>>p;
order[p-'A']++;
int J=-1;
for (j=0;j<Person.size();j++){
if (!Person[j].Name.compare(name)){
J=j;
break;
}
}
if (J==-1){
Person.push_back(PERSON(i+1,name,p,N,order[p-'A']));
}else{
Person[J].SetGrade(i+1,p,order[p-'A']);
}
}
sort(Person.begin(),Person.end(),Comp2);
for (i=0;i<Person.size();i++){
cout<<i+1<<" ";
Person[i].Print();
}
return 0;
}