Submission #1654672


Source Code Expand

require 'set'

n = gets.chomp.to_i
s1 = gets.chomp
s2 = gets.chomp
letters = ("A".."Z").to_a
atoi = [letters, (0...26).to_a].transpose.to_h

code = Struct.new("Code", :letter, :index, :number)
@a = Array.new(26)
b = Array.new(26, false)

# Union Find
@par = (0...26).to_a
@rank = Array.new(26, 0)
def find(x)
  if @par[x] == x
    return x
  else
    @par[x] = find(@par[x])
    return @par[x]
  end
end

def unite(x, y)
  xx = x
  yy = y
  x = find(x)
  y = find(y)
  if x == y
    return
  end
  if @rank[x] < @rank[y]
    @par[x] = y
  else
    @par[y] = x
    if @rank[x] == @rank[y]
      @rank[x] += 1
    end
  end
  @a[xx].number = @a[yy].number = [@a[xx].number, @a[yy].number].max
  @a[xx].index = @a[yy].index = (@a[xx].index + @a[yy].index)
end

def same(x, y)
  return find(x) == find(y)
end

n.times do |i|
  c1 = s1[i]
  c2 = s2[i]
  if letters.include?(c1) && letters.include?(c2)
    b[atoi[c1]] = true
    b[atoi[c2]] = true
    if @a[atoi[c1]].nil?
      @a[atoi[c1]] = code.new(c1, Set[i], -1)
    else
      @a[atoi[c1]].index += Set[i]
    end
    if @a[atoi[c2]].nil?
      @a[atoi[c2]] = code.new(c2, Set[i], -1)
    else
      @a[atoi[c2]].index += Set[i]
    end
  elsif letters.include?(c1)
    b[atoi[c1]] = true
    if @a[atoi[c1]].nil?
      @a[atoi[c1]] = code.new(c1, Set[i], c2.to_i)
    else
      @a[atoi[c1]].index += Set[i]
      @a[atoi[c1]].number = c2.to_i
    end
  elsif letters.include?(c2)
    b[atoi[c2]] = true
    if @a[atoi[c2]].nil?
      @a[atoi[c2]] = code.new(c2, Set[i], c1.to_i)
    else
      @a[atoi[c2]].index += Set[i]
      @a[atoi[c2]].number = c1.to_i
    end
  end
end

b = (0...26).select{|i| b[i]}

b.combination(2) do |i, j|
  c1 = @a[i]
  c2 = @a[j]
  if c1.index.intersect?(c2.index)
    unite(i, j)
  end
end

roots = b.map{|i| @par[i]}.uniq

ans = 1
roots.uniq.each do |i|
  if @a[i].number == -1
    if @a[i].index.min == 0
      ans *= 9
    else
      ans *= 10
    end
  end
end

puts ans

Submission Info

Submission Time
Task B - 大事な数なのでZ回書きまLた。
User wtnk0812
Language Ruby (2.3.3)
Score 100
Code Size 2067 Byte
Status AC
Exec Time 11 ms
Memory 2044 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 29
AC × 55
Set Name Test Cases
Sample subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.txt
Subtask1 subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask1-21.txt, subtask1-22.txt, subtask1-23.txt, subtask1-24.txt, subtask1-25.txt, subtask1-26.txt
Subtask2 subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask1-21.txt, subtask1-22.txt, subtask1-23.txt, subtask1-24.txt, subtask1-25.txt, subtask1-26.txt, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt, subtask2-16.txt, subtask2-17.txt, subtask2-18.txt, subtask2-19.txt, subtask2-20.txt, subtask2-21.txt, subtask2-22.txt, subtask2-23.txt, subtask2-24.txt, subtask2-25.txt, subtask2-26.txt
Case Name Status Exec Time Memory
subtask0-sample01.txt AC 10 ms 1916 KB
subtask0-sample02.txt AC 10 ms 1916 KB
subtask0-sample03.txt AC 10 ms 1916 KB
subtask1-01.txt AC 10 ms 1916 KB
subtask1-02.txt AC 10 ms 1916 KB
subtask1-03.txt AC 10 ms 1916 KB
subtask1-04.txt AC 10 ms 1916 KB
subtask1-05.txt AC 10 ms 1916 KB
subtask1-06.txt AC 10 ms 1916 KB
subtask1-07.txt AC 10 ms 1916 KB
subtask1-08.txt AC 10 ms 1916 KB
subtask1-09.txt AC 10 ms 1916 KB
subtask1-10.txt AC 10 ms 1916 KB
subtask1-11.txt AC 10 ms 1916 KB
subtask1-12.txt AC 9 ms 1916 KB
subtask1-13.txt AC 10 ms 1916 KB
subtask1-14.txt AC 10 ms 1916 KB
subtask1-15.txt AC 9 ms 1916 KB
subtask1-16.txt AC 10 ms 1916 KB
subtask1-17.txt AC 10 ms 1916 KB
subtask1-18.txt AC 10 ms 1916 KB
subtask1-19.txt AC 10 ms 1916 KB
subtask1-20.txt AC 10 ms 1916 KB
subtask1-21.txt AC 10 ms 1916 KB
subtask1-22.txt AC 10 ms 1916 KB
subtask1-23.txt AC 10 ms 1916 KB
subtask1-24.txt AC 10 ms 1916 KB
subtask1-25.txt AC 10 ms 1916 KB
subtask1-26.txt AC 10 ms 1916 KB
subtask2-01.txt AC 10 ms 1916 KB
subtask2-02.txt AC 10 ms 1916 KB
subtask2-03.txt AC 10 ms 1916 KB
subtask2-04.txt AC 10 ms 1916 KB
subtask2-05.txt AC 10 ms 1916 KB
subtask2-06.txt AC 10 ms 1916 KB
subtask2-07.txt AC 10 ms 1916 KB
subtask2-08.txt AC 10 ms 1916 KB
subtask2-09.txt AC 10 ms 1916 KB
subtask2-10.txt AC 10 ms 1916 KB
subtask2-11.txt AC 10 ms 1916 KB
subtask2-12.txt AC 10 ms 1916 KB
subtask2-13.txt AC 10 ms 1916 KB
subtask2-14.txt AC 10 ms 1916 KB
subtask2-15.txt AC 10 ms 1916 KB
subtask2-16.txt AC 10 ms 1916 KB
subtask2-17.txt AC 10 ms 1916 KB
subtask2-18.txt AC 10 ms 1916 KB
subtask2-19.txt AC 10 ms 1916 KB
subtask2-20.txt AC 10 ms 1916 KB
subtask2-21.txt AC 10 ms 1916 KB
subtask2-22.txt AC 10 ms 1916 KB
subtask2-23.txt AC 10 ms 1916 KB
subtask2-24.txt AC 10 ms 1916 KB
subtask2-25.txt AC 9 ms 1916 KB
subtask2-26.txt AC 11 ms 2044 KB