【九度OJ】题目1069:查找学生信息 解题报告
【九度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:查找学生信息 解题报告的更多相关文章
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 九度OJ题目1003:A+B
while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...
随机推荐
- Mysql优化,ICP、BNL算法、BKA算法、MMR算法
ICP(Index Condition Pushdown,索引条件下推)是MySQL5.6版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式. 出现原因:ICP出现Mysql5.6以前, ...
- Python基础之字符串类型内置方法
目录 1. 字符串类型 2. 常用操作及内置方法 3. 其他内置方法 1. 字符串类型 用途:姓名,性别等 定义: name1 = 'zhaojun' name2 = "zhaojun&qu ...
- Shell 指定行处理head、tail、sed
目录 Shell 指定行处理 head.tail.sed head 前几行 tail sed 删除.替换.新增.选取 案例 删除行 插入行 查看某行 替换某行 部分数据的查找并替换 读写操作 Shel ...
- 手淘lib-flexible布局适配方案
前置知识:什么是rem CSS3新增的一个相对单位rem(root em,根em).rem是相对于根节点(或者是html节点).如果根节点设置了font-size:10px;那么font-size:1 ...
- Android中的性能优化
由于手机硬件的限制,内存和CPU都无法像pc一样具有超大的内存,Android手机上,过多的使用内存,会容易导致oom,过多的使用CPU资源,会导致手机卡顿,甚至导致anr.我主要是从一下几部分进行优 ...
- 增大Oracle Virtualbox的磁盘空间
https://blog.csdn.net/hiyachen/article/details/102131823 背景 在virtualbox中装好Linux以及Application之后,发现硬盘空 ...
- spring jdbc 配置数据源连接数据库
概述 在XML配置数据源,并将数据源注册到JDBC模板 JDBC模板关联业务增删改查 在XML配置数据源 <?xml version="1.0" encoding=" ...
- Spring DM 2.0 环境配置 解决Log4j问题
搭建 spring dm 2.0 环境出的问题 log4j 的问题解决办法是 一.引入SpringDM2.0的Bundle,最后完成如下图所示:注意:要引入slf4j.api.slf4j.log4j. ...
- Zookeeper客户端链接
一.zkCli.sh ./zkCli.sh -server 39.97.176.160:2182 39.97.176.160 : zookeeper服务器Ip 2182:zookeeper端口 二.Z ...
- JSP常见的状态码
1.404错误 -- 找不到访问的页面或资源 a.URL输入错误: b.未部署项目. 2.500错误 -- JSP页面代码有错误 3.302状态码+200状态码 -- 重定向 4.200状态码 -- ...