在魔界战记中有一个设定叫做转生,当一个人物转生时,会保留之前的技能,但是技能等级需要乘以一个系数 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. [.NET开发] C#实现发送手机验证码功能

    之前不怎么了解这个,一直以为做起来很复杂. 直到前两天公司要求要做这个功能. 做了之后才发现 这不过就是一个POST请求就能实现的东西.现在给大家分享一下,有不足之处还请多多指教. 废话不多说 直接上 ...

  2. 20170601xlVBA正则表达式提取体检数据

    Public Sub GetFirst() GetDataFromWord "初检" End Sub Public Sub GetDataFromWord(ByVal SheetN ...

  3. android--------自定义Dialog之信息提示

    对话框对于应用也是必不可少的一个组件,在Android中也不例外,对话框对于一些提示重要信息,或者一些需要用户额外交互的一些内容很有帮助. 自定义Dialog步骤: 1.主要创建Java类,并继承Di ...

  4. Session问题-一个部门A登录后未注销另一个部门B再登录,以B的身份操作A的成员

    当管理员A登录后,打开某个管理界面.在A和B权限菜单相同的情况下,管理员B新开页面登录,session变为B的,然后切换到A打开的界面,不刷新的情况下可以操作A的数据. 解决方案:当浏览器登录后,即存 ...

  5. linux 查找

    linux下的查找命令有很多,常用的有which.whereis.locate.find.平时在网上搜索一些教程的时候,经常会有让使用这四条命令中的一条去查找一些东西,但是经常这次说用which,下次 ...

  6. hdu多校2C

    题意:找多条路径覆盖所有的边,求最小路径数,要求输出路径 题解:新建一个点n+1,所有奇点向它连边,然后跑欧拉回路,最后把新加的边删去,一段连续的边就是一条路径 = =但是由于太久没写欧拉回路以及之前 ...

  7. 河南省第十一届ACM大学生程序设计竞赛

    nyoj-1365-山区修路 内存限制:128MB 时间限制:3000ms 特判: No通过数:4 提交数:4 难度:3 题目描述: SNJ位于HB省西部一片群峰耸立的高大山地,横亘于A江.B水之间, ...

  8. HDU-1226 超级密码 (BFS+剪枝)

    Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密 码是一个C进 ...

  9. Android studio Suggestion: use tools:overrideLibrary=”jp.wasabeef.blurry” to force usage

    异常提示: 应用在Android Studio Build的时候,抛出了如下异常: Error:Execution failed for task ‘:app:processDebugManifest ...

  10. 两个listbox 复制

    foreach (object obj in lbxInsure .Items)             {                 billInfo.lbxAppCus .Items.Add ...