L1-087 机工士姆斯塔迪奥*(使用C++动态数组new暴力实现)

L1-087 机工士姆斯塔迪奥
分数 20
作者 DAI, Longao
单位 杭州百腾教育科技有限公司

在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。

你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。

给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。

输入格式:

输入第一行是三个整数 N,M,Q (1N×M105,0Q1000),表示地图为 N 行 M 列大小以及选择的行/列数量。

接下来 Q 行,每行两个数 Ti,Ci,其中 Ti=0 表示 BOSS 选择的是一整行,Ti=1 表示选择的是一整列,Ci 为选择的行号/列号。行和列的编号均从 1 开始。

输出格式:

输出一个数,表示安全格子的数量。

输入样例:

5 5 3
0 2
0 4
1 3
 

输出样例:

12
 
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

解题思路:
先new一个二级指针创造出二维地图,然后用循环给地图全部附上初值0.
然后根据输入给地图被攻击的地方赋值1.
最后用循环用sum记录地图还剩下几个0,输出,OK完毕。
 
代码部分:
 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int x, y, m;
 6     cin >> x >> y >> m;
 7     bool **map=new bool*[y];
 8     for (int i = 0; i <= y; i++)
 9     {
10         map[i] = new bool[x];
11         for (int k = 0; k <= x; k++)
12             map[i][k] = 0; 
13     }
14     for (int i = 0; i < m; i++)
15     {
16         bool first;
17         int num;
18         cin >> first >> num;
19         if (first == 1)//列,x 
20         {
21             for (int k = 1; k <= x; k++)
22                 map[num][k] = 1;
23         }
24         else
25         {
26             for (int k = 1; k <= y; k++)
27                 map[k][num] = 1;
28         }
29     }
30     int sum = 0;
31     for (int i = 1; i <= y; i++)
32     {
33         for (int k = 1; k <= x; k++)
34         {
35             if (map[i][k] == 0)
36                 sum++;
37         }
38     }
39     cout << sum;
40     return 0;
41 }

 

热门相关:超武穿梭   网游之逆天飞扬   人间欢喜   网游之逆天飞扬   时间都知道