提交时间:
2026 三月
语言:
C++
运行时间:
372ms
占用内存:
271K
Wrong Answer
**代码评判反馈**
**一、正确性**
1. **基本功能**:代码能够读取学生信息,并根据查询的学号输出对应信息或提示未找到,在样例输入下可以得到正确输出。
2. **潜在问题**:
- 学号在题目中是字符串格式(如"01"),但代码中使用了 `int xh` 存储学号,这会导致以"01"格式输入的学号被读为整数1。虽然样例中查询时输入"02"等也能被正确匹配(因为整数2与存储的2匹配),但如果学号包含前导零(如"001"),则输入与存储都会丢失前导零,可能引发格式不一致的输出问题。题目样例输出要求保持原样(如"02"),而代码输出整数会省略前导零,导致格式不符。
- 代码使用 `while(cin>>m)` 循环读取,但题目只要求处理一组数据。这种写法会导致等待更多输入,在OJ上可能因无法结束而超时或错误。
**二、算法效率**
1. **时间复杂度**:对每次查询都遍历全部学生(O(M*N)),在最坏情况(N=1000, M=10000)下约10^7次比较,在OJ时间限制内通常可以接受,但效率较低。
2. **改进空间**:可以使用哈希表(如 `unordered_map`)存储学号到学生信息的映射,将每次查询降至O(1),整体复杂度O(N+M)。
**三、代码质量**
1. **优点**:
- 结构体设计合理,清晰表示学生信息。
- 使用布尔变量 `found` 标记查找结果,逻辑清晰。
2. **存在问题**:
- 头文件 `#include ` 为非标准头文件,虽然OJ可能支持,但不利于可移植性。
- 变量命名随意(如 `o`, `m`, `n` 含义易混淆),`m` 实际表示学生数量,`n` 表示查询次数,与题目描述不一致,降低可读性。
- 缩进不一致,部分代码对齐混乱。
- 输出错误提示为 `"No Answer"`,与题目要求的 `"No Answer!"` 不一致(缺少感叹号),可能导致判题错误。
- 未处理输入可能存在的多余空格或换行,但本题输入格式简单,通常不影响结果。
**四、改进建议**
1. **数据类型**:将学号改为 `string` 类型,以保留前导零和字符串格式。
2. **输入处理**:移除 `while` 循环,只读取一组数据。
3. **算法优化**:使用 `map` 或 `unordered_map` 提高查询效率。
4. **代码规范**:
- 使用标准头文件(如 ``, ``, `
#include <bits/stdc++.h>
using namespace std;
struct node
{
int xh;
string xm;
string xb;
int age;
};
int main()
{
int m;
while(cin>>m)
{
vector<node>s(m);
for(int i=0;i<m;i++)
{
cin>>s[i].xh>>s[i].xm>>s[i].xb>>s[i].age;
}
int n;
cin>>n;
for(int j=0;j<n;j++)
{ int o;
cin>>o;
bool found =false;
for(int i=0;i<m;i++)
{
if(o==s[i].xh)
{ cout<<s[i].xh<<' '<<s[i].xm<<' '<<s[i].xb<<' '<<s[i].age<<endl;
found =true;
break;
}
}
if(!found)
{
cout<<"No Answer"<<endl;
}
}
}
return 0;
}