L1-087 机工士姆斯塔迪奥*(使用C++动态数组new暴力实现)
L1-087 机工士姆斯塔迪奥
分数 20
作者 DAI, Longao
单位 杭州百腾教育科技有限公司
在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。
你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。
给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。
输入格式:
输入第一行是三个整数 N,M,Q (1≤N×M≤105,0≤Q≤1000),表示地图为 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 }