在一行上输入两个长度
,由大小写字母和数字构成的字符串
和
,代表待处理的字符串。
输出处理后的最终字符串。
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