Submission #40301577


Source Code Expand

Copy
import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List
import Data.Array.ST
import Control.Monad.ST
import Data.Array
main = do
[n] <- bsGetLnInts
as <- bsGetLnInts
bs <- bsGetLnInts
let ans = abc296f n as bs
putStrLn $ if ans then "Yes" else "No"
bsGetLnInts :: IO [Int]
bsGetLnInts = unfoldr (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine
abc296f :: Int -> [Int] -> [Int] -> Bool
abc296f n as bs = cond1 && (cond2 || cond3)
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Char
import Data.List

import Data.Array.ST
import Control.Monad.ST
import Data.Array

main = do
  [n] <- bsGetLnInts
  as <- bsGetLnInts
  bs <- bsGetLnInts
  let ans = abc296f n as bs
  putStrLn $ if ans then "Yes" else "No"

bsGetLnInts :: IO [Int]
bsGetLnInts = unfoldr (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine

abc296f :: Int -> [Int] -> [Int] -> Bool
abc296f n as bs = cond1 && (cond2 || cond3)
  where
    cA = accumArray (+) 0 (1,n) [(a,1) | a <- as]
    cB = accumArray (+) 0 (1,n) [(b,1) | b <- bs]
    -- 両者の要素が一致
    cond1 = cA == cB
    -- カウントが1でない、つまりどこかに重複があるなら、何とでもなる
    cond2 = any (1 /=) (elems cA)
    -- 値の重複がないとき、反転数の偶奇が両者で等しいことが必要。
    -- <=> P[i] = B[A[i]] が偶置換
    ba = listArray (1,n) bs
    cond3 = runST $ do
      p <- newListArray (1,n) $ map (ba !) as
      loop p 1 True
    loop :: STUArray s Int Int -> Int -> Bool -> ST s Bool
    loop p i ans
      | n < i = return ans
      | otherwise =
      do
        j <- readArray p i
        if i == j then loop p (succ i) ans else do
          pj <- readArray p j
          writeArray p i pj
          writeArray p j j
          loop p i (not ans)

Submission Info

Submission Time
Task F - Simultaneous Swap
User joetheshootingst
Language Haskell (GHC 8.8.3)
Score 500
Code Size 1403 Byte
Status AC
Exec Time 145 ms
Memory 47808 KB

Compile Error

Loaded package environment from /home/contestant/.ghc/x86_64-linux-8.8.3/environments/default

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 4
AC × 48
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt, example_03.txt
All example_00.txt, example_01.txt, example_02.txt, example_03.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, hand_07.txt, hand_08.txt, overlap_00.txt, overlap_01.txt, overlap_02.txt, overlap_03.txt, overlap_04.txt, overlap_05.txt, overlap_06.txt, overlap_07.txt, overlap_08.txt, overlap_09.txt, overlap_10.txt, overlap_11.txt, overlap_12.txt, overlap_13.txt, overlap_14.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt
Case Name Status Exec Time Memory
example_00.txt AC 6 ms 3544 KB
example_01.txt AC 3 ms 3772 KB
example_02.txt AC 2 ms 3796 KB
example_03.txt AC 3 ms 3548 KB
hand_00.txt AC 97 ms 47800 KB
hand_01.txt AC 95 ms 47616 KB
hand_02.txt AC 133 ms 47720 KB
hand_03.txt AC 137 ms 47696 KB
hand_04.txt AC 55 ms 25768 KB
hand_05.txt AC 55 ms 25612 KB
hand_06.txt AC 81 ms 47052 KB
hand_07.txt AC 86 ms 46780 KB
hand_08.txt AC 84 ms 47028 KB
overlap_00.txt AC 118 ms 29840 KB
overlap_01.txt AC 118 ms 29972 KB
overlap_02.txt AC 120 ms 29856 KB
overlap_03.txt AC 119 ms 29840 KB
overlap_04.txt AC 119 ms 29496 KB
overlap_05.txt AC 123 ms 29952 KB
overlap_06.txt AC 119 ms 29304 KB
overlap_07.txt AC 121 ms 29592 KB
overlap_08.txt AC 120 ms 29920 KB
overlap_09.txt AC 120 ms 29864 KB
overlap_10.txt AC 113 ms 47032 KB
overlap_11.txt AC 111 ms 46852 KB
overlap_12.txt AC 111 ms 46852 KB
overlap_13.txt AC 111 ms 47084 KB
overlap_14.txt AC 113 ms 46856 KB
random_00.txt AC 137 ms 47760 KB
random_01.txt AC 130 ms 47720 KB
random_02.txt AC 129 ms 47608 KB
random_03.txt AC 132 ms 47568 KB
random_04.txt AC 134 ms 47572 KB
random_05.txt AC 133 ms 47800 KB
random_06.txt AC 134 ms 47728 KB
random_07.txt AC 133 ms 47620 KB
random_08.txt AC 135 ms 47552 KB
random_09.txt AC 134 ms 47608 KB
random_10.txt AC 135 ms 47684 KB
random_11.txt AC 137 ms 47216 KB
random_12.txt AC 137 ms 47552 KB
random_13.txt AC 137 ms 47624 KB
random_14.txt AC 139 ms 47712 KB
random_15.txt AC 138 ms 47808 KB
random_16.txt AC 138 ms 47724 KB
random_17.txt AC 145 ms 47736 KB
random_18.txt AC 141 ms 47804 KB
random_19.txt AC 138 ms 47700 KB


2025-04-25 (Fri)
18:05:29 +00:00