洛谷 P2105 K皇後
阿新 • • 發佈:2017-12-01
span nbsp article sca tdi sticky += 說明 break
輸入輸出樣例
輸入樣例#1: 復制
P2105 K皇後
題目描述
小Z最近撿到了一個棋盤,他想在棋盤上擺放K個皇後。他想知道在他擺完這K個皇後之後,棋盤上還有多少了格子是不會被攻擊到的。
(Ps:一個皇後會攻擊到這個皇後所在的那一行,那一列,以及兩條對角線)
輸入輸出格式
輸入格式:
第一行三個正整數 n,m,K,表示棋盤的行列,以及小Z擺放了K個皇後。
接下來K行,每行兩個正整數x,y,表示這個皇後被擺在了第x行,第y列,數據保證沒有任何兩個皇後會被擺在同一個格子裏。
輸出格式:
一行一個整數,表示棋盤上還有多少了格子是不會被攻擊到的。
輸入輸出樣例
輸入樣例#1: 復制
12 13 6
10 4
12 10
1 1
2 3
3 2
2 6
輸出樣例#1: 復制
25
說明
【數據規模和約定】
對於 30%的數據,1 ≤ n,m ≤ 5000,1 ≤ k ≤ 500。
對於另外 10%的數據,k =1。
對於 100%的數據,1 ≤ n,m ≤ 20000,1 ≤ k ≤ 500。
【時空限制】
1s/32M
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,m,k,ans,t; int x[501],y[501],h[20001]; int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=k;i++) scanf("%d%d",&x[i],&y[i]); ans=0; for(int i=1;i<=n;i++){ t=m; for(int j=1;j<=k;j++)if(x[j]==i){ t=0;break; } else{ if(h[y[j]]!=i){ h[y[j]]=i;t--; } if((i+y[j]-x[j])>0&&(i+y[j]-x[j])<=m&&h[i+y[j]-x[j]]!=i){ h[i+y[j]-x[j]]=i;t--; } if((y[j]+x[j]-i)>0&&(y[j]+x[j]-i)<=m&&h[y[j]+x[j]-i]!=i){ h[y[j]+x[j]-i]=i;t--; } } ans+=t; } printf("%d",ans); }
洛谷 P2105 K皇後