CSES - Putka Open 2015 – 3/6 - Results
Submission details
Task:Onnenluku
Sender:
Submission time:2015-09-12 18:26:24 +0300
Language:Haskell
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED19
#2ACCEPTED33
#3ACCEPTED48
Test results
testverdicttimegroup
#1ACCEPTED0.05 s1details
#2ACCEPTED0.06 s1details
#3ACCEPTED0.05 s1details
#4ACCEPTED0.05 s1details
#5ACCEPTED0.05 s1details
#6ACCEPTED0.05 s2details
#7ACCEPTED0.05 s2details
#8ACCEPTED0.05 s2details
#9ACCEPTED0.06 s2details
#10ACCEPTED0.06 s2details
#11ACCEPTED0.05 s3details
#12ACCEPTED0.06 s3details
#13ACCEPTED0.05 s3details
#14ACCEPTED0.06 s3details
#15ACCEPTED0.05 s3details

Compiler report

input/code.hs:3:1: Warning:
    Top-level binding with no type signature:
      h :: forall a. (Num a, Ord a, Read a, Show a) => a -> a -> a -> Int

input/code.hs:3:5: Warning: Defined but not used: `x'

input/code.hs:3:7: Warning: Defined but not used: `y'

input/code.hs:25:1: Warning:
    Top-level binding with no type signature:
      f :: forall a. (Num a, Ord a, Read a, Show a) => a -> a -> a -> Int

input/code.hs:25:5: Warning: Defined but not used: `x'

input/code.hs:25:7: Warning: Defined but not used: `y'

input/code.hs:47:1: Warning:
    Top-level binding with no type signature:
      g :: forall a a1. (Integral a1, Num a, Ord a) => a -> a -> a1

input/code.hs:51:1: Warning: Defined but not used: `brute'

input/code.hs:51:1: Warning:
    Top-level binding with no type signature:
      brute :: forall t. (Enum t, Num t, Show t) => t -> [t]

input/code.hs:54:1: Warning:
    Top-level binding with no type signature:
      calc :: forall a.
              (Enum a, Num a, Ord a, R...

Code

import Data.List

h 0 x y = 1
h n x y
  | n <= 9 = length [d | d <- [x,y], d <= n]
  | otherwise =
  let s = show n
      d = read [s !! 0]
      xres =  if x < d then
                2^(length s - 1)
              else if x == d then
                if n - x*10^(length s - 1) >= x*10^(length s - 2) then
                  h (n - x*10^(length s - 1)) x y
                else 0
              else 0
      yres = if y < d then
                2^(length s - 1)
             else if y == d then
                if n - y*10^(length s - 1) >= x*10^(length s - 2) then
                  h (n - y*10^(length s - 1)) x y
                else 0
             else 0 in
      xres + yres

f 0 x y = 0
f n x y
  | n <= 9 = length [d | d <- [x,y], d <= n]
  | otherwise =
  let s = show n
      d = read [s !! 0]
      xres =  if x < d then
                2^(length s - 1)
              else if x == d then
                if n - x*10^(length s - 1) >= x*10^(length s - 2) then
                  h (n - x*10^(length s - 1)) x y
                else 0
              else 0
      yres = if y < d then
                2^(length s - 1)
             else if y == d then
                if n - y*10^(length s - 1) >= x*10^(length s - 2) then
                  h (n - y*10^(length s - 1)) x y
                else 0
             else 0 in
      xres + yres + 2^(length s) - 2

g n x =
  let ks = takeWhile (\k -> x*10^k <= 9*n + x) [0..] in
  last ks

brute n =
  [k | k <- [1..n], let s = sort (show k), s !! 0 /= '0', length (group s) == 2]

calc a b =
  sum [f b x y - f (a-1) x y | x <- [1..8], y <- [x+1..9]] - 8*sum [g b x - g (a-1) x | x <- [1..9]]


main = do
    line <- getLine
    let [a,b] = map read (words line) :: [Integer]
    let res = calc a b
    putStrLn (show res)

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
2157 93337

correct output
1421

user output
1421

Test 2

Group: 1

Verdict: ACCEPTED

input
4875 95124

correct output
1278

user output
1278

Test 3

Group: 1

Verdict: ACCEPTED

input
5577 96352

correct output
1245

user output
1245

Test 4

Group: 1

Verdict: ACCEPTED

input
8362 92950

correct output
1076

user output
1076

Test 5

Group: 1

Verdict: ACCEPTED

input
5658 96660

correct output
1238

user output
1238

Test 6

Group: 2

Verdict: ACCEPTED

input
51312303535233 994542403556353

correct output
1453976

user output
1453976

Test 7

Group: 2

Verdict: ACCEPTED

input
25636920452341 934558290712847

correct output
1544072

user output
1544072

Test 8

Group: 2

Verdict: ACCEPTED

input
7917952071965 985207415843573

correct output
1763176

user output
1763176

Test 9

Group: 2

Verdict: ACCEPTED

input
48991581181227 907034837225965

correct output
1380248

user output
1380248

Test 10

Group: 2

Verdict: ACCEPTED

input
47968703305149 924246001328437

correct output
1396632

user output
1396632

Test 11

Group: 3

Verdict: ACCEPTED

input
292953755324413237753216241025...

correct output
53286731528535944

user output
53286731528535944

Test 12

Group: 3

Verdict: ACCEPTED

input
373990979330820426927419348165...

correct output
51580289482227600

user output
51580289482227600

Test 13

Group: 3

Verdict: ACCEPTED

input
701417326319476057561825658890...

correct output
42924933948374952

user output
42924933948374952

Test 14

Group: 3

Verdict: ACCEPTED

input
177202883511434557056457305647...

correct output
54500592365600640

user output
54500592365600640

Test 15

Group: 3

Verdict: ACCEPTED

input
977665117437419620152569155919...

correct output
38562071809359800

user output
38562071809359800