首页 > 试题广场 >

简单错误记录

[编程题]简单错误记录
  • 热度指数:362296 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}在本题中,我们需要处理文件报错信息,其由出错文件的文件路径和错误行号组成。

\hspace{15pt}文件路径的前三个字母为大写字母 \texttt{A-Z} 、冒号 \texttt{ 和反斜杠 \texttt{ ,代表盘符;随后是若干由小写字母构成的字符串,代表文件夹名,彼此使用单个反斜杠间隔。路径的最后一个反斜杠后是文件名。
\hspace{15pt}我们只在乎文件名(即去掉除了文件名以外的全部信息),且至多保留文件名的最后 16 个字符。

\hspace{15pt}随后,我们需要统计相同的报错信息:
\hspace{23pt}\bullet\,如果两条报错信息保留后 16 个字符后的文件名相同,且行号相同,则视为同一个报错;

\hspace{15pt}相同的报错信息以第一次出现的时间为准,至多输出最后 8 条记录。

输入描述:
\hspace{15pt}本题将会给出 1 \leqq T \leqq 100 条报错信息,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每条报错信息描述如下:

\hspace{15pt}在一行上先输入一个长度为 1 \leqq {\rm length}(x) \leqq 100 的字符串 x 代表文件路径;随后,在同一行输入一个整数 y \left( 1 \leqq y \leqq 1000 \right) 代表行号。
\hspace{15pt}文件路径的格式如题干所述,保证文件名不为空。


输出描述:
\hspace{15pt}至多八行,每行先输出一个长度为 1 \leqq {\rm length}(s) \leqq 16 的字符串 s ,代表文件名;随后,在同一行输出错误行号、报错次数。
示例1

输入

D:\oblemsinnowcoder 12
D:\nowcoderproblemsinnowcoder 12
D:\nowcoder\problemsinnowcoder 13
D:\oj\problemsinnowcoder 13

输出

oblemsinnowcoder 12 2
oblemsinnowcoder 13 2

说明

\hspace{15pt}在这个样例中,这四条报错信息去除文件路径后,由于文件名长度均超过 16 个字符,故我们只保留最后 16 个字符,得到的文件名均为 \texttt{ 。所以,我们将它们看作同一个文件,按照报错行号划分即可。
示例2

输入

A:\aa 1
B:\b 1
C:\c 1
D:\d 1
E:\e 1
F:\f 1
G:\g 1
H:\h 1
I:\i 1
A:\aa 1

输出

b 1 1
c 1 1
d 1 1
e 1 1
f 1 1
g 1 1
h 1 1
i 1 1

说明

\hspace{15pt}在这个样例中,第一、十条报错信息完全相同,但是我们以其第一次出现的顺序为准,在输出最后 8 条记录时,不包含这一报错。
示例3

输入

D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645
E:\je\rzuwnjvnuz 633
C:\km\tgjwpb\gy\atl 637
F:\weioj\hadd\connsh\rwyfvzsopsuiqjnr 647
E:\ns\mfwj\wqkoki\eez 648
D:\cfmwafhhgeyawnool 649
E:\czt\opwip\osnll\c 637
G:\nt\f 633
F:\fop\ywzqaop 631
F:\yay\jc\ywzqaop 631
D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645

输出

rzuwnjvnuz 633 1
atl 637 1
rwyfvzsopsuiqjnr 647 1
eez 648 1
fmwafhhgeyawnool 649 1
c 637 1
f 633 1
ywzqaop 631 2
import sys
result={}
result_key=[]
for line in sys.stdin:
    a = line.split()
    a_dir_name=f"r{a[0]}"
    b=a_dir_name.split("\\")
    key=f'{b[-1][-16:]}+{a[1]}'
    if key in result:
        result[key]+=1
    else:
        result[key]=1
        result_key.append(key)
last_result=[]
for i in result_key[-8:]:
    m=i.split("+")
    n=f'{m[0]} {m[1]} {result[i]}'
    last_result.append(n)
for i in last_result:
    print(i)

发表于 2025-07-03 15:24:13 回复(0)
import sys

inps = {}
for line in sys.stdin:
    l = line.strip('\n')
    if len(l) == 0:
        continue
    p, error_type = l.split(' ')
    file_name = p.split("\\")[-1][-16:]
    rec = f'{file_name} {error_type}'
    if rec in inps:
        inps[rec] += 1
    else:
        inps[rec] = 1

oups = []
for k, v in inps.items():
    oups.append(f'{k} {v}')

for oup in oups[-8:]:
    print(oup)

发表于 2025-07-01 17:20:13 回复(0)
from math import e
dic = {}

while True:
    try:
        n = input().split('\\')[-1]
        s,d = n.split(' ')
        if len(s) >16:
            n1 = s[-16:]
        else:
            n1 = s
       
        if f'{n1} {d}' not in dic:
            dic[f'{n1} {d}'] = 1
           
        else:
            dic[f'{n1} {d}'] += 1
    except:
        break
all_key = []
for i1,i2 in dic.items():
    all_key.append(i1)
if len(all_key) <=8:
    for i in all_key:
        print(i,dic[i])
else:
    for i in all_key[-8:]:
        print(i,dic[i])
基础有点差,只能使用拼多多了
发表于 2025-05-19 17:40:23 回复(0)
import sys

errors = {}

for line in sys.stdin:
    filename, line_num = line.strip().split()
    filename = filename.split("\\")[-1][-16:]
    line_num = int(line_num)
    error = f"{filename} {line_num}"

    if error not in errors:
        errors[error] = 0
   
    errors[error] += 1

for error, count in list(errors.items())[-8:]:
    print(error, count)
发表于 2025-05-12 19:17:17 回复(0)
import sys
e = {}
for line in sys.stdin:
    x, y = line.split()
    # 注意:为了查找反斜杠,需要使用双反斜杠 '\\'
    pos = x.rfind('\\')
    if len(x[pos+1:]) <= 16:
        s = x[pos+1:]
    else:
        s = x[-16:]
    key = s + ' ' + y
    if key not in e:
        e[key] = 1
    else:
        e[key] += 1
for key in list(e.keys())[-8:]:
    print(f'{key} {e[key]}')

发表于 2025-03-06 20:09:59 回复(0)
不算太难,读懂题目就行
import sys
res = {}

while True:
    try:
        line = sys.stdin.readline().strip()
        
        if not line:
            res = list(res.items())[-8:]
            for i in res:
                print(f"{i[0][0]} {i[0][1]} {i[1]}")
            break
        line = line.split()
        name, row = line
        name = name.split('\\')[-1][-16:]
        
        if (name, row) not in res:
            res[(name, row)] = 1
        else:
            res[(name, row)] += 1
        

    except:
        break


发表于 2024-11-18 21:36:47 回复(1)
import sys

erro_dict, erro_list = {}, []

for line in sys.stdin:
    route, row = line.split()
    name = route.split('\\')[-1][-16:]
    if name + row not in erro_dict:
        erro_dict[name + row] = 1
        erro_list.append((name, row))
    else:
        erro_dict[name + row] += 1

for i in erro_list[-8:]:
    print(i[0], i[1], erro_dict[i[0] + i[1]])
    

发表于 2024-11-11 17:24:37 回复(0)
import sys
inPut=[]
res=[]
for line in sys.stdin:
    if not line.strip() in inPut: 
        inPut.append(line.strip())
#print(inPut)
times=[0]*len(inPut)
for i in range(len(inPut)):
    last=inPut[i].split('\\')[-1].split(' ')
    row=last[1]
    if len(last[0])<=16:
        name=last[0]
    else:name=last[0][len(last[0])-16:len(last[0])]
    record=str(name)+' '+str(row)
    if not record in res:
        res.append(record)
        times[res.index(record)]=1
    else:
        times[res.index(record)]+=1
#print(res)
if len(res)<=8:
    for i in range(len(res)):
        print(res[i]+' '+str(times[i]))
else:  
    for i in range(len(res)-8,len(res)):
        print(res[i]+' '+str(times[i]))

发表于 2024-11-08 17:32:06 回复(0)
import sys

paths = []
paths_num = {}

for line in sys.stdin:
    path, row_num = line.split()
    path = path.split("\\")[-1][-16:]
    if path + ' ' + row_num not in paths_num.keys():
        paths.append(path + ' ' + row_num)
        paths_num[path + ' ' + row_num] = 1
    else:
        paths_num[path + ' ' + row_num] += 1
    
if len(paths) > 8:
    start = len(paths) - 8
else:
    start = 0
for i in range(start, len(paths)):
    print(paths[i] + ' ' + str(paths_num[paths[i]]))

发表于 2024-11-05 20:46:47 回复(0)
files = {}
out = []
while True:
    try:
        s = input()
        path, line = s.split(' ')
        filename = path.split('\\')[-1][-16:]
        key = f'{filename} {line}'
        files.setdefault(key, 0)
        files[key] += 1
        # 记录最后输出的八个文件
        if key not in out:
            out.append(key)
    except:
        break

for k in out[-8:]:
    print(k, files[k])

发表于 2024-08-11 16:24:19 回复(0)
import sys
list_line=[]
popd_list={}
for line in sys.stdin:
    a = line.strip().split()
    a[0] = a[0].split("\\")[-1][-16:]
    list_line.append(a[0]+" "+a[1])
l2={}
for i in list_line:
    if i not in l2:
        l2[i] = 1
    elif i in l2:
        l2[i] = l2[i]+1
outlist=[]
for h in range(len(list(l2))):
    if len(outlist) != 8:
        outlist.append(f"{list(l2)[len(list(l2))-1-h]} {l2[list(l2)[len(list(l2))-1-h]]}")
for m in outlist[::-1]:
    print(m)
发表于 2024-06-28 00:10:51 回复(0)
import sys

errors = list()
for line in sys.stdin:
    a = line.split()
    pt, col = a
    col = int(col)
    name = pt.replace('/', '\\').split('\\')[-1]
    if len(name) > 16:
        name = name[-16:]
    if not errors:
        frist_err_data = dict(err=name, col=col, num=1)
        errors.append(frist_err_data)
    else:
        last_err_name = [i['err'] for i in errors]
        if name in last_err_name:
            index = [idx for idx, i in enumerate(errors) if i['err'] == name]
            col_list = [errors[index[i]]['col'] for i in range(len(index))]
            if col in col_list:
                col_index = col_list.index(col)
                add_index = index[col_index]
                errors[add_index]['num'] += 1
            else:
                new_err_data = dict(err=name, col=col, num=1)
                errors.append(new_err_data)
        else:
            new_err_data = dict(err=name, col=col, num=1)
            errors.append(new_err_data)
for err in errors[-8:]:
    print(*list(err.values()), sep=' ')
发表于 2024-05-29 23:58:08 回复(0)
import sys
def returnsls(strs: str):
    tls = strs.split(" ")  # 拆分一行输入为列表,两个元素
    tstrs = tls[0].split("\\")
    if len(tstrs[-1]) <= 16:
        tls[0] = tstrs[-1]
    else:
        tls[0] = tstrs[-1][len(tstrs[-1]) - 16 :]
    tls.append("1")
    return tls
als = []  # 最终统计完成的列表
try:
    while True:
        ifappend = True
        strs = input()
        if not strs:
            break
        sls = returnsls(strs)
        if len(als) == 0:  # 总表为空时,直接append第一个输入
            als.append(sls)
        elif len(als) != 0:  # 总表不为空时,需要进行判断
            for i in als:  # 对于总表的每一个列表元素循环判断
                if (
                    i[0] == sls[0] and i[1] == sls[1]
                ):  # 当记录相同时,conut+1,append标签置为false!!,退出循环
                    i[2] = str(int(i[2]) + 1)
                    ifappend = False
                    break
            if ifappend:
                als.append(sls)
except:
    pass
if len(als) <= 8:
    for i in als:
        print(f"{i[0]} {i[1]} {i[2]}")
else:
    for i in range(len(als) - 8, len(als)):
        print(f"{als[i][0]} {als[i][1]} {als[i][2]}")
编辑于 2024-04-04 01:20:31 回复(0)
import sys
l1=[]
for line in sys.stdin:
    a = line.split()
    a[0]=a[0].split('\\')[-1][-16:]
    l1.append(a[0]+' '+a[1])
l2=[]
for i in l1:
    if [i,l1.count(i)] not in l2:
        l2.append([i,l1.count(i)])
l2=[x+' '+str(y) for x,y in l2[-8:]]
for i in l2:
    print(i)

发表于 2024-03-27 14:18:37 回复(0)
addreslist = []
while True:
    try:
        addreslist.append(input())
    except:
        break
outputlist = []
errorunique = {}
for error in addreslist:
    address = error.split()[0].split('\\')[-1][-16:]
    row = error.split()[1]
    if (address,row) in errorunique:
        errorunique[(address,row)] += 1
    else:
        errorunique[(address,row)] = 1
        outputlist.append((address,row))
for output in outputlist[-8:]:
    for item in output:
        print(item,end=' ')
    print(errorunique[output])

发表于 2023-09-25 17:15:41 回复(0)