问题描述

录入 n 个学生的成绩,并查询。
★数据输入
第一行输入包括 n、 m(1<=n<=50,000,1<=m<=100,000)两个数字。
接下来 n 行,每行包含名字和成绩,名字用字符串表示,长度不超过 4.成绩为不
超过 100 的非负整数,名字仅由小写字母组成。
接下来 m 行,每行包括一个名字。

★数据输出
输出 m 行,如果查询的学生不存在,输出”not,exist!”,否则输出学生的成绩。

  输入示例

    3 4
    hbb 90
    vayh 80
    loog 85
    leaf
    loog
    vayh
    vyah

  输出示例

    not,exist!

    85

    80

    not,exist!

★提示
n 个名字各不相同
60%的数据
1<=n,m<=2,000
100%的数据
1<=n<=50,000,1<=m<=100,000

解题思路

  注意到 名字为不超过4的字符串

  将名字中的字符转换为数字,a为1,b为2......,若长度不足4,则补0

  这样每个名字都可以与四个数字abcd对应

  这时候有两种做法

    (1)开四维数组arr[27][27][27][27],用arr[a][b][c][d]存成绩

    (2)开一维数组arr,对abcd分别附权值 26^0、26^1、26^2、26^3,用arr[a*26^0+b*26^1+c*26^2+d*26^3]存

    用第二种做法会省一些空间,不会出现例如0233、0011这样前面有0的情况

    补0是在后面补的233->2330   11->1100

    而第一种会浪费掉这一部分空间

  由于题目给出的成绩 0<=k<=99,对数组初始化时全部初始化为0,当作空,存的时候+1存,读取时候-1

  

code(第一种做法)

 #include <stdio.h>
#include <stdlib.h>
#include <string.h> char arr[][][][]={};
int pos[]; void init(char *str, int &data)
{
memset(pos,,sizeof(int)*);
int len = strlen(str);
int i;
for(i=;i<len;i++)
{
pos[i] = str[i]-'a'+;
}
arr[pos[]][pos[]][pos[]][pos[]] = (char)(data+);
} void find(char *str)
{
memset(pos,,sizeof(int)*);
int len = strlen(str);
int i;
for(i=;i<len;i++)
{
pos[i] = str[i]-'a'+;
}
if(arr[pos[]][pos[]][pos[]][pos[]] == )
{
printf("not,exist!\n");
}
else
{
printf("%d\n",(int)(arr[pos[]][pos[]][pos[]][pos[]])-);
}
} int main()
{
int i;
int n,m;
char str[]={};
int data; scanf("%d %d",&n,&m);
getchar();
for(i=;i<n;i++)
{
scanf("%s %d",str,&data);
getchar();
init(str,data);
}
for(i=;i<m;i++)
{
scanf("%s",str);
getchar();
find(str);
} return ;
}

数据结构_成绩查询_cjcx的更多相关文章

  1. SQL基本查询_子查询(实验四)

    SQL基本查询_子查询(实验四) 1.查询所有员工中薪水低于"孙军"的员工姓名和薪水: 2.查询与部门编号为"01"的岗位相同的员工姓名.岗位.薪水及部门号: ...

  2. C语言程序设计#成绩查询系统

    学生成绩管理系统 [注释]:请点赞,好人一生平[yi]安[wo]. #codeblocks程序下编写 #include<stdio.h>#include<stdlib.h>// ...

  3. Oracle学习总结_day05_集合_连接查询

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day05_集合_连接查询 集合操作符 UNION ( ...

  4. mongodb_查询操作使用_条件查询、where子句等(转)

    <?php /*  mongodb_查询操作使用_条件查询.where子句等(转并学习)   1.find()/findOne() mongodb数据库的查询操作即使用find()或者findO ...

  5. PHP中CURL技术模拟登陆抓取网站信息,用与微信公众平台成绩查询

    伴随微信的红火,微信公众平台成为许多开发者的下一个目标.笔者本身对于这种新鲜事物没有如此多的吸引力.但是最近有朋友帮忙开发微信公众平台中一个成绩查询的功能.于是便在空余时间研究了一番. 主要的实现步骤 ...

  6. 暑假闲着没事第一弹:基于Django的长江大学教务处成绩查询系统

    本篇文章涉及到的知识点有:Python爬虫,MySQL数据库,html/css/js基础,selenium和phantomjs基础,MVC设计模式,ORM(对象关系映射)框架,django框架(Pyt ...

  7. Mysql优化_慢查询开启说明及Mysql慢查询分析工具mysqldumpslow用法讲解

    Mysql优化_慢查询开启说明及Mysql慢查询分析工具mysqldumpslow用法讲解   Mysql慢查询开启 Mysql的查询讯日志是Mysql提供的一种日志记录,它用来记录在Mysql中响应 ...

  8. C语言 · 成绩查询系统

    抱歉,昨天忘了往博客上更新,今天补上. 成绩查询系统 分值: 21 数学老师小y 想写一个成绩查询系统,包含如下指令: insert [name] [score],向系统中插入一条信息,表示名字为na ...

  9. [Oracle] 关系型数据库排序算法和数据结构以及关联查询

    关系型数据库排序算法和数据结构以及关联查询 1. Merge sort 理解merge sort算法将有助于更好地理解数据库join操作 - merge join 算法逻辑 将2个有序的大小为N/2的 ...

随机推荐

  1. CCTextFieldTTF 与 5种常用CCMenuItem

    //继承(class HelloWorld : public cocos2d::CCLayer, public cocos2d::CCTextFieldDelegate) CCTextFieldTTF ...

  2. HDU - 5306: Gorgeous Sequence (势能线段树)

    There is a sequence aa of length nn. We use aiai to denote the ii-th element in this sequence. You s ...

  3. java 实现拖动文件到窗口功能

    package tuo; import java.awt.BorderLayout; import java.awt.Color; import java.awt.datatransfer.DataF ...

  4. java向excel写数据

    package pymongo1; import java.io.File;import java.io.IOException;import java.io.OutputStream; import ...

  5. 10个 NPM 使用技巧

    对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹( npm init ),下载npm模块( npm install ),创建测试( npm tese ) 和自定义脚本( npm r ...

  6. Yii 常用命令

    一.Yii的Active Recorder包装了很多. 特别是把SQL中 把where,order,limit,IN/not IN,like等常用短句都包含进CDbCriteria这个类中去,这样整个 ...

  7. 深入理解http/https之缓存 2

    1:web缓存的实现 web缓存: WEB缓存(cache)位于Web服务器和客户端之间. 缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL, ...

  8. kibana 统计field所有值百分比

    步骤: 1.创建新的Visualize——Pie chart 2.工具栏设置 metrics: slice size Count (默认) buckets:Split Slices 注意调整size: ...

  9. mysql的备份恢复等操作

    备份数据库 shell> mysqldump -h host -u root -p dbname >dbname_backup.sql 恢复数据库 shell> mysqladmin ...

  10. Oracle 数据库表(常见的表)

    数据库表(常见的表) 堆组织表:普通表 索引组织表:iot 嵌套表 临时表 外部表 1 表 一个表最多1000列,oracle会把列大于254的行存储在多个单独的行段中, 表中的行是无限的,    术 ...