猪八戒吃西瓜(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[ ...
随机推荐
- bootstrap table简洁扁平的表格
使用方法 1.在html页面的head标签中引入Bootstrap库(假如你的项目还没使用)和bootstrap-table.css. <link rel="stylesheet&qu ...
- 【SGU 104】Little shop of flowers
题意 每个花按序号顺序放到窗口,不同窗口可有不同观赏值,所有花都要放上去,求最大观赏值和花的位置. 分析 dp,dp[i][j]表示前i朵花最后一朵在j位置的最大总观赏值. dp[i][j]=max( ...
- 12.Android之Tabhost组件学习
TabHost是整个Tab的容器,TabHost的实现有两种方式: 第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost.各个Tab中的内容在布 ...
- BZOJ1015 [JSOI2008]星球大战starwar
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- bzoj2096 pilots
依旧是维护两个单调队列,只是队首检查的方式略有变动 /*by SilverN*/ #include<iostream> #include<algorithm> #include ...
- Linux数据包路由原理、Iptables/netfilter入门学习
相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wik ...
- JAVA中toString方法的作用
因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不 ...
- omnetpp inet
http://blog.csdn.net/midie/article/details/5086983 omnetpp inet 自带了Mingw编译环境,而不再需要Visual C编译环境了.事实上, ...
- Activity的成员变量
// set by the thread after the constructor and before onCreate(Bundle savedInstanceState) is called. ...
- linux下使用 Tomcat 的几个坑
总结:用sudo su - 后的身份启动tomcat,可选用 bin下的 ./catalina.sh run命令以显示启动过程中可能的报错信息 1.普通用户是无法使用0~1023的熟知端口的,需要 ...