相信大家都知道象棋中“车”的攻击方式 ,现在给定一个n*n的棋盘,然后往棋盘中放置m个车,问最后有多少个位置还是安全的(不会被攻击到),数据保证每个点至多放置一个车,不考虑车与车的攻击(所有车都是友军)
输入格式:
第一行输入n和m
接下来的m行每行两个整数x,y代表每个车的坐标
(1<=n<=100000,m<=min(n*n,100000),1<=x,y<=n)
输出格式:
输出一个整数,代表有多少个位置不会被攻击到
样例 1
输入:
4 2
1 1
4 4
复制
输出:
4
题解:
list_n_m = list(map(int,input().split())) n = list_n_m[0] m = list_n_m[1] hang_list = [] lie_list = [] for i in range(m): x_y = list(map(int,input().split())) x = x_y[0] hang_list.append(x) y = x_y[1] lie_list.append(y) hang_list = list(dict.fromkeys(hang_list)) lie_list = list(dict.fromkeys(lie_list)) print((n-len(hang_list))*(n-len(lie_list)))
个人思路:剩余方格数=未直接使用行*未直接使用列。
例如题目所给测试用例:
未直接使用行 = 4-1((1,1)位于第一行)-1((4,4)位于第4行) = 2
未直接使用列 = 4-1((1,1)位于第一列)-1((4,4)位于第4列) = 2
故答案 = 2*2 = 4
当然解法还有很多,欢迎大家指导