【九度OJ】题目1069:查找学生信息 解题报告

标签(空格分隔): 九度OJ


[LeetCode]

http://ac.jobdu.com/problem.php?pid=1069

题目描述:

输入N个学生的信息,然后进行查询。

输入:

输入的第一行为N,即学生的个数(N<=1000)
接下来的N行包括N个学生的信息,信息格式如下:
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:
02
03
01
04

输出:

输出M行,每行包括一个对应于查询的学生的信息。
如果没有对应的学生信息,则输出“No Answer!”

样例输入:

4
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
5
02
03
01
04
03

样例输出:

02 刘唐 男 23
03 张军 男 19
01 李江 男 21
04 王娜 女 19
03 张军 男 19

Ways

查找题。

按照书上的说法,这个运算量级在千万量级,应该用高速的查找方法。按照书上的说法,应该用二分。

可是我用了sort之后,感觉没必要用二分也能AC,试了下果然行。这个方法应该直接不用sort也能解决。

同时注意一下为什么刚开始一直AC不了,因为我把name和sex的空间开的太小了。这就长个教训,空间给的很足够,只管用就是,别精打细算。

#include <stdio.h>
#include <algorithm>
#include <string.h> using namespace std; struct student {
char num[100];
char name[300];
char sex[20];
int age; bool operator<(const student &A) const {
return strcmp(num, A.num) < 0;
}
} students[1001]; int main() { int n;
int m;
char temp[1000]; while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; i++) {
scanf("%s%s%s%d", students[i].num,
students[i].name, students[i].sex, &students[i].age);
} sort(students, students + n); scanf("%d", &m); int j;
for (int i = 0; i < m; i++) {
scanf("%s", temp);
for (j = 0; j < n; j++) {
if (strcmp(temp, students[j].num) == 0) {
printf("%s %s %s %d\n", students[j].num,
students[j].name, students[j].sex, students[j].age);
break;
}
}
if (j == n)
printf("No Answer!\n");
} }
return 0;
}

把上面的方法简化,也能在同样的20ms内解决。而题目的要求是1000ms,差得远呢。所以以后这样的题可以先用笨方法试一试。

#include <stdio.h>
#include <algorithm>
#include <string.h> using namespace std; struct student {
char num[100];
char name[300];
char sex[20];
int age; } students[1001]; int main() { int n;
int m;
char temp[1000]; while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; i++) {
scanf("%s%s%s%d", students[i].num, students[i].name, students[i].sex, &students[i].age);
} scanf("%d", &m); int j;
for (int i = 0; i < m; i++) {
scanf("%s", temp);
for (j = 0; j < n; j++) {
if (strcmp(temp, students[j].num) == 0) {
printf("%s %s %s %d\n", students[j].num, students[j].name, students[j].sex, students[j].age);
break;
}
}
if (j == n)
printf("No Answer!\n");
} }
return 0;
}

挑战下自己,使用二分进行解决。手写了一下二分,运行时间依然是20ms,感觉很无语。

#include <stdio.h>
#include <algorithm>
#include <string.h> using namespace std; struct student {
char num[100];
char name[300];
char sex[20];
int age; bool operator<(const student &A) const {
return strcmp(num, A.num) < 0;
}
} students[1001]; int main() { int n;
int m;
char temp[1000]; while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; i++) {
scanf("%s%s%s%d",
students[i].num, students[i].name,
students[i].sex, &students[i].age);
} sort(students, students + n); scanf("%d", &m); for (int i = 0; i < m; i++) {
scanf("%s", temp); int start = 0;
int end = n - 1;
int mid;
int answer = -1;
while (start <= end) {
mid = (start + end) / 2;
int cmp = strcmp(temp, students[mid].num);
if (cmp == 0) {
answer = mid;
break;
} else if (cmp < 0) {
end = mid - 1;
} else {
start = mid + 1;
}
}
if (answer == -1) {
printf("No Answer!\n");
} else { printf("%s %s %s %d\n",
students[answer].num, students[answer].name,
students[answer].sex, students[answer].age);
} } }
return 0;
}

Date

2017 年 2 月 27 日

【九度OJ】题目1069:查找学生信息 解题报告的更多相关文章

  1. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  2. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  4. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  5. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  6. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  7. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  8. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

  9. 九度OJ题目1003:A+B

    while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...

随机推荐

  1. Telink BLE MESH PWM波的小结

    本本针对Telink BLE MESH SDK  灯控的使用进行说明. 1.调整灯光的频率 默认情况下 SDK PWM波的频率是 600HZ的,有时我们需要将它调整频率,例如调整为4K,只需要更改参数 ...

  2. kubernetes部署Docker私有仓库Registry

    在后面的部署过程中,有很多的docker镜像文件,由于kubernetes是使用国外的镜像,可能会出现下载很慢或者下载不下来的情况,我们先搭建一个简单的镜像服务器,我们将需要的镜像下载回来,放到我们自 ...

  3. android studio Please configure Android SDK / please select Android SDK

    有可能是sdk文件损坏造成的. file->settings->appearance&behavior->system settings->android sdk-&g ...

  4. cvc-complex-type.2.3: Element 'servlet' cannot have character [children], because the type's content

    错误原因:粘贴代码 <servlet> <servlet-name>barServlet</servlet-name> <servlet-class>S ...

  5. TD课程通最终版本体验

    功能上,新版本增加了学校教室的上课情况,有无课程可以清楚查询,如下图: 在添加课程的设置上有改进,相比于之前编辑课程后不能保存,新版本在可保存的基础上又增加了登陆教务系统的功能,学生使用更加方便快捷, ...

  6. 巩固javaweb第十四天

    巩固内容: 单行文本框: 单行文本框的基本语法格式如下: < input type="text"  name="输入信息的字"  value=" ...

  7. 数据库时间和 java 时间不一致解决方案

    java添加 date 到数据库,时间不一致 使用 date 添加到数据库,数据库显示的时候和date时间相差 8 个小时,这是由于 mysql 上的时区的问题,这里有两个解决方案: 方案一: 设置数 ...

  8. 【leetocde】922. Sort Array By Parity II

    Given an array of integers nums, half of the integers in nums are odd, and the other half are even.  ...

  9. Spring Boot with H2 Database

    Learn to configure H2 database with Spring boot to create and use an in-memory database in runtime, ...

  10. C++STL标准库学习笔记(三)multiset

    C++STL标准库学习笔记(三)multiset STL中的平衡二叉树数据结构 前言: 在这个笔记中,我把大多数代码都加了注释,我的一些想法和注解用蓝色字体标记了出来,重点和需要关注的地方用红色字体标 ...