zoukankan      html  css  js  c++  java
  • 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: }
  • 相关阅读:
    如何列出陣列中大於n的所有元素? (C/C++) (STL)
    為什麼int *ptr = 345;這樣的寫法有問題?
    如何使用STL寫XML轉檔程式? (C/C++) (STL) (Web) (XML)
    如何判斷回文(palindrome) ? (C/C++) (C) (STL)
    如何將int轉string? (C/C++) (C)
    如何將輸入的字串存到記憶體後,再一起印出來? (C/C++) (C)
    如何為程式碼加上行號? (C/C++) (STL)
    如何将字符串前后的空白去除(C/C++) (STL)
    簡單的Linked List實現
    如何將struct塞進vector? (C/C++) (STL)
  • 原文地址:https://www.cnblogs.com/wuhenqs/p/3409332.html
Copyright © 2011-2022 走看看