在一行上输入两个长度
,由大小写字母和数字构成的字符串
和
,代表待处理的字符串。
输出处理后的最终字符串。
dec fab
5D37BF
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一个字符
,其十进制数为
,二进制数为
,翻转后得到
,再转换回十六进制数为
;
第二个字符
,翻转
;
第三个字符
,翻转
;
第四个字符
,翻转
;
第五个字符
,翻转
;
第六个字符
,翻转
。
abV CDw
B3VD5w
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一个字符
,其十进制数为
,二进制数为
,翻转后得到
;
第二个字符
,翻转
;
第三个字符
,跳过该字符;
第四个字符
,翻转
;
第五个字符
,翻转
;
第六个字符
,跳过该字符。
123 15
88C4A
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一、二个字符
,其十进制数为
,二进制数为
,翻转后得到
,再转换回十六进制数为
;
第三个字符
,翻转
;
第四个字符
,翻转
;
第五个字符
,翻转
。
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-05-15 更新题面。
2. 2024-12-14 更新题面。
import sys
dd = {
'0':'0',
'1':'8',
'2':'4',
'3':'C',
'4':'2',
'5':'A',
'6':'6',
'7':'E',
'8':'1',
'9':'9',
'A':'5',
'B':'D',
'C':'3',
'D':'B',
'E':'7',
'F':'F'
}
for line in sys.stdin:
s = line.strip().replace(' ', '')
s1 = []
s2 = []
# 进行排序
for i in range(len(s)):
if i%2 == 0:
s1.append(s[i])
else:
s2.append(s[i])
s1.sort()
s2.sort()
res = []
for i in range(len(s1)):
res.append(s1[i])
if i<= len(s2)-1:
res.append(s2[i])
# print(res)
# 进行转换
for c in res:
if dd.get(c.upper()):
print(dd[c.upper()], end='')
else:
print(c, end='')
print()
def px(s):
str_ji=''
str_ou=''
n=len(s)
sc=''
for i in range(n):
if i%2==0:
str_ou+=s[i]
else: str_ji+=s[i]
str_ou=sorted(str_ou)
str_ji=sorted(str_ji)
n_ou=len(str_ou)
n_ji=len(str_ji)
length=min(n_ji,n_ou)
for i in range(length):
sc+=str_ou[i]
sc+=str_ji[i]
if n_ou > n_ji:
sc+=str_ou[-1]
else:
if n_ou < n_ji:
sc+=str_ji[-1]
else: sc=sc
return sc
def cz(s):
a=int(s,16)
a=bin(a)
a = a[2:].zfill(4)
n=len(a)
b = a[::-1]
kk=int(b,2)
if kk<=9:
sc=str(kk)
else:
if kk==10:
sc='A'
if kk==11:
sc='B'
if kk==12:
sc='C'
if kk==13:
sc='D'
if kk==14:
sc='E'
if kk==15:
sc='F'
return sc
sz='0123456789'
zm='abcdefABCDEF'
while True:
try:
s=input().replace(' ','')
s=px(s)
n=len(s)
result=''
for i in range(n):
if s[i] not in sz and s[i] not in zm:
result+=s[i]
else:
result+=cz(s[i])
print(result)
except:
break 出题人语文好差 烦死了
import sys
def num_converter(num):
hex = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
temp = hex.index(num.upper())
binary = []
for i in range(4):
if temp>=2**(3-i):
binary.append(1)
temp -= 2**(3-i)
else:
binary.append(0)
reverse_bin = []
for i in range(4):
reverse_bin.append(binary[3-i])
output= 0
for i in range(len(reverse_bin)):
output += reverse_bin[i]*(2**(3-i))
return hex[output]
for line in sys.stdin:
# reading inputs
str1, str2 = line.strip().split(" ")[0],line.strip().split(" ")[1]
# merging and re-ordering
entire_str = str1+str2
str1 = []
str2 = []
for i in range(len(entire_str)):
if i%2==0:
str1.append(entire_str[i])
else:
str2.append(entire_str[i])
str1 = sorted(str1)
str2 = sorted(str2)
entire_str = []
for i in range(len(str1)+len(str2)):
if i%2==0:
entire_str.append(str1[i//2])
else:
entire_str.append(str2[i//2])
# converting hexadecimal
output = ""
for item in entire_str:
if (item>='0' and item<="9")&nbs***bsp;(item>="A" and item<="F")&nbs***bsp;(item>="a" and item<="f"):
output += num_converter(item)
else:
output += item
print(output) from itertools import zip_longest
import sys
def do_sort(s):
a, b = [], []
for i, c in enumerate(s):
if i % 2:
b.append(c)
else:
a.append(c)
a.sort()
b.sort()
temp = []
for c1, c2 in zip_longest(a, b):
temp.append(c1)
if c2:
temp.append(c2)
return "".join(temp)
def decode(s):
output = ""
for c in s:
if c.isdigit()&nbs***bsp;ord("A")<=ord(c)<=ord("F")&nbs***bsp;ord("a")<=ord(c)<=ord("f"):
bin_form = bin(int(c, base=16))[2:]
bin_form = bin_form.rjust(4, "0")[::-1]
hex_form = hex(int(bin_form, base=2))[2:]
output += hex_form.upper()
else:
output += c
return output
for s in sys.stdin:
a, b = s.split()
s = do_sort(a+b)
print(decode(s)) while True:
try:
str3 = input().replace(' ', '')
new_str1, new_str2, new_str3 = '', '', ''
for x in range(len(str3)):
if x % 2 == 0:
new_str1 += str3[x]
else:
new_str2 += str3[x]
new_str1 = sorted(new_str1)
new_str2 = sorted(new_str2)
if len(new_str1) == len(new_str2):
for x in range(len(new_str1)):
new_str3 = new_str3 + new_str1[x] + new_str2[x]
else:
for x in range(len(new_str2)):
new_str3 = new_str3 + new_str1[x] + new_str2[x]
new_str3 = new_str3 + new_str1[-1]
res_str3 = ''
for x in new_str3:
if x in '0123456789abcdefABCDEF':
num1 = int(x, 16)
num2 = bin(num1).replace('0b', '')
num2 = '0'*(4-len(num2)) + num2
str_num2 = ''
for y in range(1, len(num2)+1):
str_num2 += num2[-y]
num2 = int(str_num2, 2)
num16 = hex(num2).replace('0x', '').upper()
res_str3 += num16
else:
res_str3 += x
print(res_str3)
except:
break def BIT(s):
list2 = []
for i in s:
if i in list1: # i为16进制数
# 先转10进制
ten = int(i, 16)
# 再由16进制转2进制
# 右对齐,填充长度为4,用'0'填充,转换为list型
two = list(format(ten, 'b').rjust(4, '0'))
two.reverse()
# 再由二进制变为10进制,再变为16进制
ten = int(''.join(two), 2)
sixteen = format(ten, 'x')
if sixteen.islower():
sixteen = sixteen.upper()
list2.append(sixteen)
else:
list2.append(i)
return list2
while True:
try:
s1,s2 = input().split()
list1 = ['0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f',
'A','B','C','D','E','F']
# 注意:字符串转化为列表
s = list(s1 + s2)
# 注意:奇数项和偶数项从小到大排序
s[::2] = sorted(s[::2])
s[1::2] = sorted(s[1::2])
print(''.join(BIT(s)))
except:
break 😁😁希望对小白有帮助,我也是小白while True:
try:
dic = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
inpt=input().replace(" ","")#zi字符串合并
new=""
ss=""
odd=""
even=""
#提取even和odd的字符串
for i in range(len(inpt)):
if i%2 ==0:
even+=inpt[i]
else:
odd+=inpt[i]
#用sorted对odd和even 进行排序,然后转化成列表
odd=sorted(odd)
even=sorted(even)
for i in range(len(inpt)):
if i%2==0:
ss+=even[0]
even.pop(0)
else:
ss+=odd[0]
odd.pop(0)
for i in range(len(ss)):
if ss[i] in "0123456789abcdefABCDEF":
new+= dic[int(bin(dic.index(ss[i].upper())).replace("0b","").rjust(4,"0")[::-1],2)]
else:
new+=ss[i]
print(new)
except:
break 重新修改了一下前人的代码while 1:
try:
a,b=input().split()
c=a+b
js=''
os=''
for i in range(0, len(c)):
if i%2==0:
js += c[i]
else:
os += c[i]
js=sorted(js)
os=sorted(os)
new=[]
for j in range(1, len(c)+1):
if j%2==1:
new.append(js[j//2])
else :
new.append(os[j//2-1])
new1=[]
for i in new:
if 'a'<=i<='f' or '0'<=i<='9' or 'A'<=i<='F':
t=len((bin(int(i, 16))[2:][::-1]))
new1.append(('0'*(4-t)+bin(int(i, 16))[2:])[::-1])
else:
new1.append(i)
s=''
for i in new1:
if 'F'<i<='Z' or 'f'<i<='z':
s += i
else:
s += hex(int(i, 2))[2:].upper()
print (s)
except:
break
def string_sort(string):
"""
:description: 下标为奇数的字符和下标为偶数的字符分别从小到大排序。
:param: string - str
:return: str
"""
# 版本1
# odd = []
# string_ = []
# even = []
# for i, item in enumerate(string):
# if (i + 1) % 2 == 0:
# even.append(item)
# string_.append('null')
# else:
# odd.append(item)
# string_.append(item)
# odd.sort()
# even.sort()
# j, k = 0, 0
# src_string = ''
# for i, item in enumerate(string_):
# if item == 'null':
# src_string += str(even[j])
# j += 1
# else:
# src_string += str(odd[k])
# k += 1
# 版本2
odd = string[1::2]
even = string[::2]
src_string = [i for i in range(len(string))]
src_string[1::2] = list(sorted(odd))
src_string[::2] = list(sorted(even))
return src_string
def hex_reverse(string):
"""
:description: 如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,
则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。
如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’;
如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
【如果string为数字,则转为2进制,并进行逆序,再转为10进制;
如果string为字母,则先由16进制转为10进制,再由10进制转为16进制,变为大写】
:param: string: str
:return str
"""
# 十六进制转十进制再二进制转
src_ = bin(int('0x' + string, 16))[2:][::-1]
# 二进制转十进制再转十六进制
src_string = hex(int('0b' + src_ + '0' * (4 - len(src_)), 2))[2:]
if src_string.isalpha():
src_string = src_string.upper()
return src_string
def deal_string(string):
"""
:description: 如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,
则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。
如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’;
如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
"""
src_string = ''
for i, item in enumerate(string):
value = ''
if item.isdigit():
value = hex_reverse(str(item))
src_string += value
elif ((item >= 'A') and (item <= 'F'))&nbs***bsp;((item >= 'a') and (item <= 'f')):
value = hex_reverse(item)
src_string += str(value)
else:
src_string += str(item)
return src_string
if __name__ == '__main__':
while True:
try:
string = input().strip().split(' ')
string_ = str(string[0]) + str(string[-1])
src_string = string_sort(string_)
# print(src_string)
src_ = deal_string(src_string)
print(src_)
except:
break p = "0123456789ABCDEFabcdef"
while True:
try:
s1, s2 = input().split()
s = s1 + s2
s1, s2 = '', ''
for index, value in enumerate(s):
if index % 2 != 0:
s1 += value
else:
s2 += value
s1, s2 = ''.join(sorted(s1)), ''.join(sorted(s2))
ss = ''
for i in range(len(s1) + len(s2)):
if i % 2 == 0:
if s2[i//2] in p:
ss += hex(int(bin(int(s2[i//2], 16))[2:].zfill(4)[::-1], 2))[2:].upper()
else:
ss += s2[i//2]
else:
if s1[i//2] in p:
ss += hex(int(bin(int(s1[i//2], 16))[2:].zfill(4)[::-1], 2))[2:].upper()
else:
ss += s1[i//2]
print(ss)
except:
break
while True:
try:
str1,str2 = input().split()
mergeStr = str1 + str2
even,odd = sorted(mergeStr[::2]),sorted(mergeStr[1::2])
mergeStr = ""
for i , j in zip(even,odd):
mergeStr += i
mergeStr += j
if(len(even) > len(odd)):
mergeStr += even[-1]
tab = str.maketrans("0123456789abcdefABCDEF","084C2A6E195D3B7F5D3B7F")
print(mergeStr.translate(tab))
except:
break
#include<iostream>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
string Tab{ "0123456789ABCDEF" }; //映射表
string foo(string str1, string str2)
{
string ans = str1 + str2; //合
string odd, even;
for (unsigned int i = 0; i < ans.size(); ++i) //分
{
if (i % 2 == 0)
even += ans[i];
else
odd += ans[i];
}
sort(odd.begin(), odd.end()); //排序
sort(even.begin(), even.end());
ans.clear();
for (unsigned int i = 0; i < odd.size(); ++i) //合
{
ans += even[i];
ans += odd[i];
}
if (even.size() > odd.size())
ans += even.back();
for (auto& ch : ans) //转换
{
if ('a' <= ch && ch <= 'f') //统一转换到大写
ch -= 32;
if (Tab.find(ch) == string::npos)
continue;
bitset<4> bin1(Tab.find(ch)); //二进制bitset<>,八进制oct,十进制dec,十六进制hex
string tmp = bin1.to_string();
reverse(tmp.begin(), tmp.end()); //反转
bitset<4> bin2(tmp);
ch = Tab[bin2.to_ulong()]; //二进制转10进制,映射
}
return ans;
}
int main()
{
string str1, str2;
while (cin >> str1 >> str2)
cout << foo(str1, str2) << endl;
return 0;
} def combine(s1, s2):
res = []
s = s1 + s2
r1 = ''
r2 = ''
for i in range(len(s)):
if i % 2 == 0:
r1 += s[i]
else:
r2 += s[i]
r1 = sorted(r1, reverse=False)
r2 = sorted(r2, reverse=False)
for i in range(min(len(r1), len(r2))):
res.append(r1[i])
res.append(r2[i])
if len(r1) > len(r2):
res.append(r1[-1])
return ''.join(res)
def change(x):
# '0x' 为 16进制数前缀
x = '0x' + x
bit = bin(int(x,16)).replace('0b','')[::-1].ljust(4,'0') # 如字符为‘4’,为0b100,反转后为0010
# 0010-->2
num = int(bit, 2)
res = hex(num).replace('0x','')
if res.isalpha():
res = res.upper()
return res
while True:
try:
s = input().split()
newS = combine(s[0], s[1])
result = ''
for i in newS:
if i.isdigit()&nbs***bsp;'A'<=i<='F'&nbs***bsp;'a'<=i<='f':
result += change(i)
else:
result += i
print(result)
except:
break while True:
try:
ss=input().replace(' ','')
even,odd='',''
xx,zz='',''
for i in range(len(ss)):
if i%2==0:
even+=ss[i]
else:
odd+=ss[i]
for k,j in zip(sorted(even),sorted(odd)):
xx+=k
xx+=j
if len(ss)%2!=0:
xx+=sorted(even)[-1]
for j in xx:
if j in '0123456789abcdefABCDEF':
yy='0000'+bin(int(j,16))[2:]
yy=yy[-4:][::-1]
zz+=hex(int('0b'+''.join(yy),2))[-1].upper()
else:
zz+=j
print(zz)
except: 这样运行是可以的,不过yy那两行连在一起就出错,不知道为什么; while ii <(len(ss)-1): even+=ss[ii] odd+=ss[ii+1] ii+=2还有这里用while就超时了,有没有大佬解释一下为啥
ls_1 = ['a','b','c','d','e','f']
ls_2 = ['10','11','12','13','14','15']
l_1 = ['0','1','2','3','4','5','6','7','8','9']
def jinzhi_16_2(s):
if s in l_1:
num = eval(s)
l = []
if num == 0:
return '0000'
else:
while num != 0:
a = num%2
num = num//2
l.append(str(a))
while len(l) != 4:
l.append(str(0))
return str(''.join(l))
else:
for i in range(6):
if s == ls_1[i]&nbs***bsp;s == ls_1[i].upper():
l_t,num = [],eval(ls_2[i])
while num != 0:
a = num%2
num = num//2
l_t.append(str(a))
while len(l_t)!=4:
l_t.append(str(0))
return str(''.join(l_t))
def jinzhi_2_16(s):
num = 0
for i in range(4):
num += eval(s[i])*2**(3-i)
if num in range(10):
return str(num)
elif num in range(10,16):
return ls_1[num-10].upper()
while True:
try:
a = input().replace(' ','')
lst_ji,lst_ou= [],[]
for i in range(len(a)):
if i % 2 == 0:
lst_ou.append(a[i])
elif i % 2 != 0:
lst_ji.append(a[i])
lst_ji.sort()
lst_ou.sort()
lst = []
for j in range(min(len(lst_ji),len(lst_ou))):
lst.append(lst_ou[j])
lst.append(lst_ji[j])
if len(lst_ji) > len(lst_ou):
lst.append(lst_ji[-1])
elif len(lst_ji) < len(lst_ou):
lst.append(lst_ou[-1])
l_all = []
for p in lst:
if p in ls_1&nbs***bsp;p in l_1&nbs***bsp;p.lower() in ls_1:
a_t = jinzhi_16_2(p)
b_t = jinzhi_2_16(a_t)
l_all.append(b_t)
else:
l_all.append(p)
print(''.join(l_all))
except:
break