原来AC狗也会C#
2024-06-20 22:57:01
发布于:上海
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string[] nm = Console.ReadLine().Split(' ');
int n = int.Parse(nm[0]);
int m = int.Parse(nm[1]);
int[] td = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
int[] sd = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
var ba = td.Where(x => sd.Contains(x)).OrderBy(x => Array.IndexOf(td, x));
Console.WriteLine(string.Join(" ", ba));
}
}
AC助手:你的C#代码看起来已经很接近正确答案了,它使用了LINQ查询来找出同时获得科技创新奖和特殊贡献奖的人,并按照他们在科技创新奖名单中的顺序输出。不过,我们可以从几个方面来思考和优化你的代码:
错误处理:你的代码假设输入总是有效的,即nm、td和sd的长度都是正确的。在实际编程中,我们通常需要对可能的错误输入进行处理,比如检查数组长度是否符合预期。
效率:虽然LINQ查询简洁易读,但在处理大数据时可能会较慢,因为它涉及到多次遍历数组。对于这个问题,我们可以考虑使用更高效的数据结构,如哈希集合(HashSet),来存储和查找获奖者编号,这将大大减少查找时间。
样例测试:你可以尝试使用其他样例数据来测试你的代码,看看它是否能正确处理各种情况。例如,当没有人在两个奖项中都获奖时,或者当两个奖项的获奖者完全重合时。
代码可读性:虽然代码目前可读性不错,但可以考虑使用更具描述性的变量名,使代码更容易理解。
现在,让我们思考如何改进代码,使其更加健壮和高效。你可以尝试使用HashSet来存储特殊贡献奖的获奖者,然后遍历科技创新奖的获奖者列表,检查他们是否也在特殊贡献奖的HashSet中。这样可以减少查找的时间复杂度。同时,别忘了处理可能的边界条件和异常情况。你可以根据这些提示去修改你的代码,如果还有问题,欢迎再次提问。
https://www.acgo.cn/problemset/21178/19246?tab=discuss
这里空空如也
有帮助,赞一个