问题 A: 猪八戒吃西瓜(wmelon)

时间限制: 1 Sec  内存限制: 64 MB
提交: 30  解决: 14
[提交][状态][讨论版]

题目描述

有一天,贪吃的猪八戒来到了一个大果园,果园里有n(n≤100000)个大西瓜,每个西瓜 的质量不大于长整型(longint),并且每个西瓜的质量都不同。猪八戒非常无聊,先把所有的西瓜按从小到大排列,然后再选m(m≤l00000)个质量是Ki的西瓜,请你帮他把想吃的西瓜找出来。

输入

第1行输入n,然后以下n行输入n个整数;
接着输入m,然后以下m行,每行一个整数Ki。

输出

输出m行,每行一个整数,表示重新排列后,Ki在这N个数中的位置。

样例输入

3
132
123
145
1
123

样例输出

1
解题思路:距离上一次做题已经一星期了,主要是因为题做不下去了,基础太弱,稍微复杂点的算法题就做不出来了,由于心比较浮躁,算法也看不懂。。。要时刻提醒自己:保持一颗平静的心!!
  这个题里面的输出说:表示重新排列后,ki在里面的位置,让我误以为每取一次后面的数字都得减1!!!然后提交两遍不对。
  然后zxp提醒后,改完提交AC了。
  由于数据量太多,不能每取一个就查找一次,那样即使用二分查找也得nlogn,也是比较大的。
  最好的方法是只查找一次:将查找的数字从小到大排序,然后从已排好序的西瓜里开始找,找到一个后接着从上一个的位置开始找就可以,这样时间复杂度是n;
  例:西瓜: 2 3 5 7 8 9 设置一个i;
要查找的排好序: 3 8 设一个j;
  j=1的时候,i从1到3所在下标;j=2时,i从3的下标到8的下标,查找完后i从1到n;
  然后再按输入顺序排序,输出排序后的下标即可。 代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib> using namespace std; struct node{
long int k;
long int ksortw;
long int kcinw;
};
node xigua[]; int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
} int cmp(node a,node b){
return a.k<b.k;
} int cmp2(node a,node b){
return a.kcinw<b.kcinw;
} int main()
{
long int n;
long int a[];
long int m; long int cou=;
scanf("%ld",&n);
for(long int i=;i<=n;i++){
scanf("%ld",&a[i]);
}
qsort(a+,n,sizeof(long int),comp);
scanf("%ld",&m);
for(long int i=;i<=m;i++){
scanf("%ld",&xigua[i].k);
xigua[i].kcinw=i;
}
sort(xigua+,xigua+m+,cmp);
long int i=;
long int j=;
while(){
if(j==m+){
break;
}
if(a[i]==xigua[j].k){
//printf("%ld\n",i);
xigua[j].ksortw=i;
j++;
}else{
i++;
}
}
sort(xigua+,xigua+m+,cmp2);
for(int i=;i<=m;i++){
printf("%d\n",xigua[i].ksortw);
} return ;
}
 

猪八戒吃西瓜(wmelon)-排序-查找的更多相关文章

  1. 猪八戒吃西瓜(wmelon)

    猪八戒吃西瓜(wmelon) 题目描述 有一天,贪吃的猪八戒来到了一个大果园,果园里有n(n≤100000)个大西瓜,每个西瓜 的质量不大于长整型(longint),并且每个西瓜的质量都不同.猪八戒非 ...

  2. Sublime文本排序&查找重复行&删除重复行

    排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...

  3. Java进阶(三十九)Java集合类的排序,查找,替换操作

    Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...

  4. C/C++ 排序&&查找算法(面试)

    一.排序 1.冒泡排序 void BubbleSort(int array[],int n) { ; ; ; ; ;i<n - ;i++) /*外循环控制排序的总趟数*/ { flag = ; ...

  5. javascript排序 查找算法大全

    在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍.为了加深印象,特意把里面的常用的排序.查找算法用js写了一遍 具体的实例在我的github上,大家可以访问的: http ...

  6. 深入JDK源码之Arrays类中的排序查找算法(转)

    原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...

  7. [Day7]循环、数组方法、排序查找

    1. ASCII(American Standard Code for Information Interchange) (1)数字0-9对应ASCII编码十进制为48-57, 字母a-z对应ASCI ...

  8. Java常用的排序查找算法

    public static void main(String[] args) {      // bubbleSort(); // int[] a = {20,2,10,8,12,17,4,25,11 ...

  9. python排序查找

    无序表查找 def seq_search(lst, key): found = False pos = 0 while pos < len(lst) and not found: if lst[ ...

随机推荐

  1. svn版本控制方案:多分支并行开发,多环境自动部署

    背景 keywords:svn,trunk,branch,jenkins,maven,merge 两地同时开发一个产品,目前线上有3个环境:测试环境.预发布环境.生产环境.目前系统部署采用jenkin ...

  2. Java编程思想学习(十) 正则表达式

    正则表达式是一种强大的文本处理工具,使用正则表达式我们可以以编程的方法,构造复杂的文本模式,并且对输入的字符串进行搜索.在我看来,所谓正则表达式就是我们自己定义一些规则,然后就可以验证输入的字符串是不 ...

  3. 获取Trustedinstalled权限.reg

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*\shell\runas] @="获取TrustedInstaller权限&q ...

  4. 学习使用Robot Framework自动化测试框架-web元素定位

    转:http://blog.csdn.net/u012145166/article/details/50342569 1.name和id 其中使用到了name和id定位.但有时候由于开发人员的疏忽或者 ...

  5. windows ubuntu双系统启动

    开始安装系统 1.安装系统 首先安装windows8和ubuntu12.04,安装先后顺序可以不用管,只是安装到ubuntu的分区时需要注意device for boot loader install ...

  6. mysql 存储过程中注意的问题

    OPEN cur; REPEAT FETCH cur INTO int_type, int_element_id, int_num, int_user_id; IF NOT _DONE THEN IF ...

  7. yii 10.16

    什么是框架? a)         框架就是一个半成品,一个帮助我们完成业务流程的程序 b)        框架融合了很多的功能,但是不会给我们具体功能模块 c)         我们需要在框架的基础 ...

  8. linux学习笔记二-----文件权限管理

    一.分析文件权限(ln -s 文件名 快捷方式名 用来创建文件的快捷方式,下方ll查看信息时会在第一个字符处显示l) [hjp@bogon ~]$ ll total 4 drwxrwxr-x. 2 h ...

  9. 神器Alfred使用

    神器官网:http://www.alfredapp.com/ 许多人装好了之后就再也没有怎么使用过,这软神器, 一直不明白它为什么叫神器,最近研究了一下,真的是,很多东西我们没有好好利用 部分使用功能 ...

  10. MIM协议与Base64编码

    MIME Protocol 1. MIME的全称是"Multipurpose Internet Mail Extensions",中译为"多用途互联网邮件扩展" ...