联想笔试 联想笔试题 0328
笔试时间:2024年03月23日
历史笔试传送门:2023秋招笔试合集
第一题
题目
在一些大学里,学生发表论文的话会有一定的奖学金加分。另外,对于一篇论文,其作者的顺序不同,加分也不相同。在本题中,一篇论文最多仅三个作者,其中第一作者加3分,第二作者加2分,第三作者加1分。在这一年,学校一共有n篇论文发表。你需要输出按照字典序从小到大输出每一名作者以及其对应的加分总数是多少。
输入描述
第一行输入一个正整数n(1≤n≤100),表示论文数量。
接下来n行,每一行第一个数字表示该篇论文的作者数;
之后输入对应个数的仅由小写英文字母组成的字符串,每两个字符串用空格隔开。分别表示这一篇论文的第一作者,第二作者,....的名字。每一个作者的名字长度不超过 20。每一篇论文最多三个作者,且这三个作者名字都不同。
输出描述
按照字典序从小到大输出每个作者的名字以及其对应的加分总数,中间用空格隔开。每一个作者的信息单独输出一行。
样例输入
3 george annie jack2 jack peter
2 peter bakh
1 zack
样例输出
annie 2
bakh 2
george 3
jack 4
peter 5
zack 3
参考题解
模拟题。
C++:[此代码未进行大量数据的测试,仅供参考]
#include<bits/stdc++.h> using namespace std; map<string , int> ha; int main() { int n; cin>>n; while(n--) { int m; cin>>m; string name; int score = 3; while(m--) { cin>>name; ha[name] += score; --score; } } for(auto p : ha) cout<<p.first<<" "<<p.second<<endl; return 0; }
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Map<String, Integer> ha = new HashMap<>(); int n = scanner.nextInt(); while (n-- > 0) { int m = scanner.nextInt(); int score = 3; for (int i = 0; i < m; i++) { String name = scanner.next(); ha.put(name, ha.getOrDefault(name, 0) + score); score--; } } for (Map.Entry<String, Integer> entry : ha.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } scanner.close(); } }
Python:[此代码未进行大量数据的测试,仅供参考]
import sys from collections import defaultdict ha = defaultdict(int) n = int(input()) for _ in range(n): m = int(input()) score = 3 for _ in range(m): name = input().strip() ha[name] += score score -= 1 for name, score in ha.items(): print(name, score)
第二题
题目
定义f(A)表示将序列A进行unique操作之后的序列的元素个数。unique 操作是指将相邻且相同的元素合成个元素, 再按照原序列的相对顺序进行排列之后得到的序列。例如,[1,1,2,2,3,1]进行unique操作之后的序列为[1,2,3,1]; [1,2,3,3,2
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。