Codeforces Beta Round #81 A Transmigration

在魔界战记中有一个设定叫做转生,当一个人物转生时,会保留之前的技能,但是技能等级需要乘以一个系数 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: }
posted @ 2013-11-05 21:19  ~無痕~  阅读(318)  评论(0编辑  收藏  举报