在魔界战记中有一个设定叫做转生,当一个人物转生时,会保留之前的技能,但是技能等级需要乘以一个系数 k ,如果技能等级小于100,将会在转生之后失去该技能。

转生之后,会学到一些新技能。这些新技能附加的等级为0。

现在给你 n 个已有的技能,m个新技能和系数k,请按字典序输出转生之后的技能总数、技能名称和等级。

  这题最纠结蛋疼的地方就是不能使用强制类型转换和系统函数floor()。

  从样例输出来看,技能等级是向下取整的(350*0.75=262.5)。但是如果使用强制类型转换或者是用floor()函数的话,会有一组奇葩的数据卡住(floor(8700*0.94) = (int)(8700*0.94) = 8177,我也不知道谁出的这么操蛋好的数据,反正就是这里卡死了。这里的结果应该为8178)。

  然后其他的很简单了,将已有技能读取之后,等级小于100的直接去掉,转换之后小于100的变成0。然后开始读取新技能,读取一个遍历一次看是否存在这个技能(最多才20 * 20,不超时),存在继续,不存在就加入这个新技能。最后按照字典序排序输出就Ok了。

附AC代码,手残勿喷:

   1: #include <cstdio> 

   2: #include <cstdlib>

   3: #include <cstring>

   4: #include <cmath>

   5: #include <algorithm>

   6: #include <iostream>

   7: #include <string>

   8: #include <map>

   9: using namespace std;

  10:  

  11: class Skill

  12: {

  13:     public:

  14:         int lv;

  15:         string name;

  16:         Skill()

  17:         {

  18:             name.clear();

  19:             lv = 0;

  20:         }

  21:         bool operator < (const Skill &tmp) const

  22:         {

  23:             return name < tmp.name;

  24:         }

  25: }skill[59];

  26:  

  27: int Floor(double a)

  28: {

  29:     int res = a;

  30:     if (a - res >= 0.999999)

  31:         return (res + 1);

  32:     return res;

  33: }

  34:  

  35: string tmp;

  36: int tlv;

  37:  

  38: int main()

  39: {

  40:     int n, m, all = 0;

  41:     double k;

  42:     while(cin >> n >> m >> k)

  43:     {

  44:         all = 0;

  45:         for (int i = 1; i <= n; i++)

  46:         {

  47:             bool flag = 1;

  48:             cin >> tmp >> tlv;

  49:             for (int j = 1; j <= all && flag; j++) 

  50:                 if (skill[j].name == tmp) 

  51:                     flag = 0;

  52:             if (flag)

  53:             {

  54:                 if (Floor(tlv * k) >= 100)

  55:                 {

  56:                     all += 1;

  57:                     skill[all].name = tmp;

  58:                     skill[all].lv = Floor(tlv * k);

  59:                 }

  60:             }

  61:         }

  62:         for (int i = 1; i <= m; i++)

  63:         {

  64:             bool flag = 1;

  65:             cin >> tmp;

  66:             for (int j = 1; j <= all && flag; j++)

  67:                 if (skill[j].name == tmp)

  68:                     flag = 0;

  69:             if (flag)

  70:             {

  71:                 all += 1;

  72:                 skill[all].name = tmp;

  73:                 skill[all].lv = 0;

  74:             }

  75:         }

  76:         cout << all << endl;

  77:         sort(skill+1, skill+all+1);

  78:         for (int i = 1; i <= all; i++)

  79:         {

  80:             cout << skill[i].name << " " << skill[i].lv << endl;

  81:             skill[i].name.clear(); 

  82:             skill[i].lv = 0;

  83:         }

  84:     }

  85:     return 0;

  86: }

Codeforces Beta Round #81 A Transmigration的更多相关文章

  1. Codeforces Beta Round #80 (Div. 2 Only)【ABCD】

    Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...

  2. Codeforces Beta Round #62 题解【ABCD】

    Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...

  3. Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】

    Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...

  4. Codeforces Beta Round #13 C. Sequence (DP)

    题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...

  5. Codeforces Beta Round #79 (Div. 2 Only)

    Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...

  6. Codeforces Beta Round #77 (Div. 2 Only)

    Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...

  7. Codeforces Beta Round #76 (Div. 2 Only)

    Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...

  8. Codeforces Beta Round #75 (Div. 2 Only)

    Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...

  9. Codeforces Beta Round #74 (Div. 2 Only)

    Codeforces Beta Round #74 (Div. 2 Only) http://codeforces.com/contest/90 A #include<iostream> ...

随机推荐

  1. URAL 1741 Communication Fiend

    URAL 1741 思路: dp 状态:dp[i][1]表示到第i个版本为正版的最少流量花费 dp[i][0]表示到第i个版本为盗版的最少流量花费 初始状态:dp[1][0]=dp[0][0]=0 目 ...

  2. Chrome与之驱动对应的版本

    看到网上基本没有最新的chromedriver与chrome的对应关系表,便兴起整理了一份如下,希望对大家有用: chromedriver版本 支持的Chrome版本 v2.46 v71-73 v2. ...

  3. C#开发框架学习

    C# 开源框架(整理) Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用J ...

  4. vue.js 混入

    混入:mixins 一种分发Vue组件中可反复使用的功能的方法. 混入对象可以:包含任意组件选项. 混入对象的选项将被混入该组件本身的选项. 如果有同名选项,在和组件的数据发生冲突时,组件数据优先.混 ...

  5. 使用与不使用@RequestBody注解的区别

    1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...

  6. Java数组常用API

    java.util.Arrays Arrays.asList() 数组转换成列表 String[] strArray = {"zhang", "xue", &q ...

  7. order by having group by

    1.group by 和having 的使用 SELECT *, count(`sku_quantity`)  as quantity FROM products  group by sku  hav ...

  8. vijos 1046 floyd求最小环

    // 转自vijos题解 最小环问题<1>朴素的算法:令e(u,v)表示u和v之间的连边,再令min(u,v)表示,删除u和v之间的连边之后,u和v之间的最短路最小环则是min(u,v) ...

  9. UVA-10497 Sweet Child Makes Trouble (计数+高精度)

    题目大意:这是一道简单排列组合题 .简单说下题意:n件物品,把这n件物品放到不是原来的位置,问所有的方案数.所有的位置都没有变. 题目解析:按照高中的方法,很快得到一个递推公式:f [n]= (n-1 ...

  10. WinForm下的TabControl控件

    一.TabControl控件介绍 TabControl实现的具体效果: 在实际工作中,我是这么用TabControl控件,实现切换页面效果.比如要实现某个界面进行操作,然后还要查看一下日志,就可以使用 ...