码蹄集象棋

相信大家都知道象棋中“车”的攻击方式 ,现在给定一个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

当然解法还有很多,欢迎大家指导

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值