1440 [AA]重生之我是Zarc_______厉兵秣马

来源:互联网 发布:考试经文知乎 编辑:程序博客网 时间:2024/05/19 06:16

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--;    }}
原创粉丝点击