Tèo đang cố gắng gây ấn tượng với một cô gái. Nhưng cô gái không thể hiện bất kỳ dấu hiệu quan tâm nào với anh ta. Vì vậy, người bạn thân nhất của anh đã đề nghị anh tặng một chuỗi Grove cho cô. Chuỗi Grove là một chuỗi có độ dài lẻ chỉ bao gồm các bảng chữ cái chữ thường được sắp xếp theo cách sao cho giá trị X của nó là nhỏ nhất có thể. X được tính như sau:
+ Với mọi kí tự có trong xâu, nó có giá trị được tính như sau: Tính K là khoảng cách từ vị trí của kí tự này đến tâm của chuổi. Rồi lấy K nhân với mã ASCII của kí tự này.
+ X là tổng giá trị của tất cả các kí tự có trong xâu.
Ví dụ: Cho chuỗi: aaa. Giá trị của chuổi là X = 1*97 + 0*97 + 1*97 = 194.
Vì vậy, với một chuỗi có độ dài lẻ chỉ bao gồm các bảng chữ cái viết thường, hãy tìm một hoán vị của chuỗi đã cho sao cho X nhỏ nhất có thể. Và nếu có nhiều chuỗi như vậy thì hãy in chuỗi nhỏ nhất theo từ vựng.
Đầu vào :
Chứa một chuỗi có độ dài lẻ chỉ bao gồm các bảng chữ cái viết thường. Độ dài không quá một triệu.Đầu ra :
in kết quả mong muốn trong các dòng riêng biệt.def order_chain(chain):
def order(chars, k):
char_values = [ord(char) for char in chars]
k = k if k > len(char_values) else char_values[k % len(char_values)]
return k * sum(char_values)
def char_order(x, chars):
k = ord(x)
char_values = [ord(char) for char in chars]
if x < k and x in char_values:
return k
return -1
def get_smallest_k(chain):
k = -1
for i in range(len(chain)):
k, _ = min(chain[i], k)
return k
return order(chain, get_smallest_k(chain))
def search_chain(chain):
chain_length = set()
for i in range(len(chain)):
if i in chain_length:
return ord('a')
chain_length.add(i)
return search_chain(chain[:i]) or search_chain(chain[i+1:]) + or - 1
def main():
chain = input().lower()
print(order_chain(search_chain(chain)))
if __name__ == '__main__':
main()
Pascal đây, không nói sớm: )
program GroveChain;
function order_chain(chars: char): integer;
var
k: integer;
begin
for i := 1 to length(chars) do
begin
k := ord(chars[i]) - (ord(chars[i]) mod len(chars));
if result < k then
begin
result := k;
end;
end;
end;
function char_order(c: char; chars: char): integer;
var
k: integer;
begin
k := ord(c);
for i := 0 to length(chars) do
begin
if c = chars[i] then
begin
k := i;
exit;
end;
end;
result := -1;
end;
function find_smallest_k(s: string): integer;
var
k: integer;
begin
k := 0;
for i := 1 to length(s) do
begin
k := k + ord(s[i]) - (ord(s[i]) mod length(s));
end;
repeat do
begin
k := k;
for i := 1 to length(s) do
begin
if k <= ord(s[i]) then
begin
k := ord(s[i]) - (ord(s[i]) mod length(s));
exit;
end;
end;
k := k + 1;
end;
until k < length(s);
result := k;
end;
function find_smallest_chain(s: string): string;
var
i: integer;
j: integer;
k: integer;
begin
result := ''
for i := 1 to length(s) do
begin
j := i;
k := find_smallest_k(s);
result := s[i] + result;
for j := i+1 to length(s) do