ABC202Dをいろいろな言語で解いてみた
解いてみただけ
Python3
import math A, B, K = map(int, input().split()) result = [] def sameFactorial(a, b): return math.factorial(a+b) // (math.factorial(a)*math.factorial(b)) def headIs(a, b, k): if a == 0: result.append('b'*b) elif b == 0: result.append('a'*a) elif sameFactorial(a-1, b) >= k: result.append('a') headIs(a-1, b, k) else: result.append('b') headIs(a, b-1, k-sameFactorial(a-1, b)) headIs(A, B, K) print(''.join(result))
Julia
A, B, K = parse.(Int64, split(readline())) function sameFactorial(a, b) factorial(big(a+b)) ÷ (factorial(big(a))*factorial(big(b))) end function headIs(a, b, k) if a == 0 return 'b'^b elseif b == 0 return 'a'^a elseif sameFactorial(a-1,b) >= k return 'a' * headIs(a-1, b, k) else return 'b' * headIs(a, b-1, k-sameFactorial(a-1,b)) end end print(headIs(A, B, K))
Ruby
def C(n, k) result = 1 k.times do |i| result *= n - i result /= i + 1 end result end def solve(a, b, k) if a == 0 'b' * b elsif b == 0 'a' * a elsif k <= (c = C(a + b - 1, b)) 'a' + solve(a - 1, b, k) else 'b' + solve(a, b - 1, k - c) end end A, B, K = gets.split.map(&:to_i) puts solve(A, B, K)
Perl
use strict; use warnings; use utf8; sub C { my ($n, $k) = @_; my $result = 1; for my $i (1..$k){ $result *= $n - $i + 1; $result /= $i; } return $result; } sub Solve { my ($a, $b, $k) = @_; if($a == 0){ return 'b'x$b; }elsif($b == 0){ return 'a'x$a; }else{ my $c = C($a+$b-1,$b); if($k <= $c) { return 'a' . Solve($a-1, $b, $k); }else{ return 'b' . Solve($a, $b-1, $k-$c); } } } my ( $A, $B, $K ) = split / /,<>; print Solve($A, $B, $K);
最近腰が痛い...