猪八戒吃西瓜(wmelon)-排序-查找
问题 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)-排序-查找的更多相关文章
- 猪八戒吃西瓜(wmelon)
		
猪八戒吃西瓜(wmelon) 题目描述 有一天,贪吃的猪八戒来到了一个大果园,果园里有n(n≤100000)个大西瓜,每个西瓜 的质量不大于长整型(longint),并且每个西瓜的质量都不同.猪八戒非 ...
 - Sublime文本排序&查找重复行&删除重复行
		
排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...
 - Java进阶(三十九)Java集合类的排序,查找,替换操作
		
Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...
 - C/C++ 排序&&查找算法(面试)
		
一.排序 1.冒泡排序 void BubbleSort(int array[],int n) { ; ; ; ; ;i<n - ;i++) /*外循环控制排序的总趟数*/ { flag = ; ...
 - javascript排序 查找算法大全
		
在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍.为了加深印象,特意把里面的常用的排序.查找算法用js写了一遍 具体的实例在我的github上,大家可以访问的: http ...
 - 深入JDK源码之Arrays类中的排序查找算法(转)
		
原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...
 - [Day7]循环、数组方法、排序查找
		
1. ASCII(American Standard Code for Information Interchange) (1)数字0-9对应ASCII编码十进制为48-57, 字母a-z对应ASCI ...
 - Java常用的排序查找算法
		
public static void main(String[] args) { // bubbleSort(); // int[] a = {20,2,10,8,12,17,4,25,11 ...
 - python排序查找
		
无序表查找 def seq_search(lst, key): found = False pos = 0 while pos < len(lst) and not found: if lst[ ...
 
随机推荐
- 【POJ 2096】Collecting Bugs 概率期望dp
			
题意 有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n. 求他找到s个系统的bug,n种bug, ...
 - Oracle之自定义函数
			
数据库中函数包含四个部分:声明.返回值.函数体和异常处理. --没有参数的函数 create or replace function get_user return varchar2 is v_use ...
 - 【poj1740】 A New Stone Game
			
http://poj.org/problem?id=1740 (题目链接) 男人八题之一 题意 对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该 ...
 - document.body.scrollTop 各浏览器兼容性解决
			
document.compatMode:获取当前浏览器采用的渲染方式.主要是浏览器的模式,有两个:BackCompat,CSS1Compat.其中前者是怪异模式,后者是标准模式. IE默认是BackC ...
 - [IOS Delegate和协议]
			
转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/25655443 作者:小马 代理和协议的语法这里不赘述,自己查资料. 这个demo的 ...
 - c++实现快排出现错误
			
#include"header_file.h" using namespace std; void swap(int a,int b) { int t; t=a; a=b; b=t ...
 - 检测ADO.net拼接字符串中非法字符
			
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Refle ...
 - tmux 快捷键
			
ctrl+b , 修改窗口名称 ctrl+b ' 快速按名字切换窗口 ctrl+b w 列出窗口列表 Ctrl+b 激活控制台:此时以下按键生效 系统操作 ? 列出所有快捷键:按q返回 d 脱离当前会 ...
 - Hibernate之多对多
			
一.项目结构如下图 二.保存学生和课程及其学生选课关系代码如下(测试类中不能再有双向关联,否则会报错,因为,都维护了中间表外键,会有中间表外键冲突,如果非要写双向关联,就需要配置中设置某一方维护主键, ...
 - Java 获取距离最近一段时间的时间点
			
if (timeFilter == 1) {// 最近三个月 long curTimeSeconds = System.currentTimeMillis() / 1000L; para.put(&q ...