Background
作为统一次元最强决斗者,毁灭世界的头号BOSS的扎克,竟然被自己的分身神游矢用主角光环给抹杀了。心怀怨恨的扎克带着愤怒重生了,现在,他不仅仅准备打败上代务给他定下的命运,而且准备向帕尔多斯那样击败最强决斗者——法老王。但是,首先,他得从自己的卡组中找到最强的四张卡来作为他的最强王牌。
Description
每一张卡牌都有五大属性:星数,攻击力,防御力,效果强度,属性。
扎克的选择是通过寻找到评分最高的四张卡,评分标准:
总评 = 星数 + 攻击力10 + 防御力*10 + 效果强度 100000 + 属性对应的数字;
卡牌一共有七大属性和属性对应的强度:
wind 1
water 1
fire 2
land 1
light -1000
dark 10
god 10000000
不过,神(god)属性的卡牌扎克无法使用,星数超过12的卡牌属于ZZ假卡,也无法使用
Input
首先输入七行数据,加载卡牌的属性和对应的属性值
然后输入18,表示一共有十八张卡牌,接下来18行数据,每一行数据表示一张卡牌的属性
X001 13 1000 1000 10 dark
X002 4 2000 1000 10 dark
X003 0 3000 1000 10 dark
X004 7 4000 100 10 dark
X005 8 5000 100 10 dark
X006 7 3000 10 1 land
X007 12 100 100 1 land
X008 1 1011 100 1 land
X009 2 1002 10 1 fire
X010 3 1004 100 1 fire
X011 4 1005 100 1 fire
X012 5 1006 100 1 lind
X013 6 1007 100 2 wind
X014 7 1008 0 3 wind
X015 8 1009 0 1 wind
X016 1 1008 10 4 wind
X017 2 1022 100 1 wind
X018 1 1013 100 1 god
分别是 卡牌名称,星数,攻击力,防御力,效果强度,属性
Output
输出评分前五的卡牌名称,每个一行,最后空一行
map vector pair 关联容器, 迭代器,C++11的标准,看一下就可以做了,没坑
Provided Codes
ss.cpp
#include<iostream>
#include "source.h"
using namespace std;
void nature_complete(map<string, int> &nature);
void card_complete(vector<pair<string, int>>& card, map<string, int> &nature);
bool compare(pair<string,int> a, pair<string, int> b);
void print(vector<pair<string, int>> ::iterator begin, vector<pair<string, int>> ::iterator end);
int main()
{
map<string, int> Nature;
nature_complete(Nature);
auto be = Nature.cbegin();
vector<pair<string, int>> Card;
card_complete(Card,Nature);
sort(Card.begin(), Card.end(), compare);
auto bbe = Card.begin();
auto eend = Card.end();
print(bbe, eend);
getchar();
getchar();
}
Submission
source.h
#include<iostream>
#include<map>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
void nature_complete(map<string, int> &nature) {
for (int i = 0; i<7; i++) {
string name;
int value;
cin >> name >> value;
nature.insert(pair<string, int>(name, value));
}
}
void card_complete(vector<pair<string, int>>& card, map<string, int> &nature) {
int amount;
cin >> amount;
for (int i = 0; i < amount; i++) {
string name, Nature;
int star, attack, defense, power;
cin >> name >> star >> attack >> defense >> power >> Nature;
if (star <= 12 && Nature != "god") {
int nat;
map<string, int>::iterator key = nature.find(Nature);
if (key != nature.end()) {
nat = key->second;
}
int value = star + attack * 10 + defense * 10 + power * 100000 + nat;
card.push_back(pair<string, int>(name, value));
}
}
}
bool compare(pair<string, int> a, pair<string, int> b) {
return a.second > b.second;
}
void print(vector<pair<string, int>> ::iterator begin, vector<pair<string, int>> ::iterator end) {
vector<pair<string, int>> ::iterator tempIterator;
int i = 0;
for (tempIterator = begin; tempIterator != end; ++tempIterator,++i) {
cout << tempIterator->first << endl;
if (i == 3)
break;
}
}
Standard Answer
source.h
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
void nature_complete(map<string, int> &nature)
{
int num = 0;
string Na;
int Data;
while (num < 7)
{
cin >> Na >> Data;
nature.insert({ Na,Data });
num++;
}
}
void card_complete(vector<pair<string, int>>& card, map<string, int> &nature)
{
int num;
cin >> num;
for (int i = 0; i < num;)
{
i++;
string std;
int A; int B; int C; int D; string E; int sum = 0;
int EE;
cin >> std >> A >> B >> C >> D >> E;
if (A >= 12 || E == "god")
continue;
EE = nature[E];
sum += A + 10 * B + 10 * C + 100000 * D + EE;
card.push_back(make_pair(std, sum));
//cout << std << " " << sum << endl;
}
}
bool compare(pair<string, int> a, pair<string, int> b)
{
if (a.second > b.second)
return true;
else
return false;
}
void print(vector<pair<string, int>> ::iterator begin, vector<pair<string, int>> ::iterator end)
{
int i = 4;
while (i>0)
{
cout << (*begin).first;
cout << endl;
begin++;
i--;
}
}