まったりするmatayu

ツイートにゴミがついた感じのブログ

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);

最近腰が痛い...