|
|
你这方法比我的快点:
WITH b AS (
SELECT POWER(2,LEVEL-1) id
,CEIL(LEVEL/:N) X
,MOD(LEVEL-1,:N) Y
FROM DUAL
CONNECT BY LEVEL<=:N*:N
)
,c AS (
SELECT b1.id
,SUM(CASE WHEN b1.x=b2.x OR b1.y=b2.y THEN b2.id END)+b1.id r_attack
,SUM(CASE WHEN (ABS(b1.x-b2.x),ABS(b1.y-b2.y)) IN ((1,2),(2,1)) THEN b2.id END)+b1.id k_attack
FROM b b1,b b2
WHERE b1.id<>b2.id
GROUP BY b1.id
)
SELECT COUNT(*)
FROM c r1,c r2,c k1,c k2
WHERE r1.id<r2.id
AND k1.id<k2.id
AND BITAND(r1.r_attack,r2.id)=0
AND BITAND(r1.r_attack,k1.id)=0
AND BITAND(r1.r_attack,k2.id)=0
AND BITAND(r2.r_attack,k1.id)=0
AND BITAND(r2.r_attack,k2.id)=0
AND BITAND(k1.k_attack,k2.id)=0
AND BITAND(k1.k_attack,r1.id)=0
AND BITAND(k1.k_attack,r2.id)=0
AND BITAND(k2.k_attack,r1.id)=0
AND BITAND(k2.k_attack,r2.id)=0
;
含泪劝OO放弃这个章,我的章只发给非版主的PUBER
|
|