qmh的测试1
首先输入一个n,之后输入n个数a(1<=a<=1e7),对这n个数排序后,你需要找到所有的它们连续的长度。把这些连续的长度排序后输出
输入
输入:
8
1 5 2 7 4 5 7 1
输出
输出:
1 2 2
样例解析:
将上面数排序得:
1 1 2 4 5 5 7 7
去重后 :
1 2 4 5 7
连续长度:
2 2 1
因为1 2 4之间少一个3去连接,所以1 2和4之间要断开。又因为4 5和7之间少一个6来连接,所以5和7直之间要断开
结果排序后:
1 2 2
题解:
因为n最大是是1e7,而且程序必须在1s内得到答案。所以我们这里肯定要使用O(n)复杂度的木桶排序
对于:1 5 2 7 4 5 7 1 这一组数据
如果使用木桶排序的话数组至少要开到v[9],因为用木桶排序用的数据本身当v数组的下标
v数组: 0 1 2 3 4 5 6 7 8 9 //数组下标
处理一下v数组: 0 1 1 0 1 1 0 1 0 0 //这里的1代表这个下标在输入的数据中出现过,0代表没有出现过。比如v[2]=1,就表示2这个数在我们输入的数据中
代码:
#include <stdio.h>
#include<string.h>
#include <iostream>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=1e7+5;
int v[maxn],w[maxn],p[maxn];
int main()
{
int n,a,maxx=0;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&a);
v[a]=1;
maxx=max(maxx,a);
}
}
这样处理过之后我们发现完成了去重和排序
for(int i=1;i<=maxx;++i)
{
if(v[i]>0)
{
printf("%d ",i);
}
}
printf("\n");
你可以用这个代码把v数组打印出来结果会是1 2 4 5 7
之后我们就要求它的连续长度,这个时候就新定义一个数组w和p
int ans=0,i;
for(i=1;i<=maxx;++i){
if(v[i]){
w[i]=w[i-1]+1;
}
else {
p[w[i-1]]++;
ans=max(ans,w[i-1]); //我们把
}
}
下标 :0 1 2 3 4 5 6 7 8 9
v中的值:0 1 1 0 1 1 0 1 0 0
w初始值:0 0 0 0 0 0 0 0 0 0
处理后w:0 1 2 0 1 2 0 1 0 0
把w[1,7]这个下标内的,所有0之前的值都存起来,因为它就是那个连续长度
2 2 1 这个1不在0之前但是它也是连续长度,我们也要把它取出来
第一个2是{1,2}这两个数的两个数的连续长度。
第二个2是{4,5}这两个数的连续长度
第三个数1是{7}这1个数的连续长度
这样的话,我们就会得到2 2 1这个结果,但是我们还要对它排序后再输出。这里又要用到木桶排序
但是我已经把它们放在木桶p里面了
int ans=0,i;
for(i=1;i<=maxx;++i){
if(v[i]){
w[i]=w[i-1]+1;
}
else { //else就是出现了断点0
p[w[i-1]]++; //把这个数用木桶存起来
ans=max(ans,w[i-1]); //找到这个木桶的右端点 ,以便我们下一步输出的时候去枚举
} //因为木桶排序是把这个数当作下标,所以要找右端点只需要看你需要用到的最大下标是多少
}
下标: 0 1 2 3 4
p初始值:0 0 0 0 0
处理后p:0 1 2 0 0
之后就打印出就可以了,注意格式:
p[w[i-1]]++;
ans=max(ans,w[i-1]); //不加这两行代码的话,这个样例中的1,就会没有放到木桶p中 for(int i=1;i<=ans;++i){
while(p[i])
{
if(i==ans && p[i]==1)
printf("%d\n",i);
else
printf("%d ",i);
p[i]--;
}
}
总代码:用c++格式提交
1 #include <stdio.h>
2 #include<string.h>
3 #include <iostream>
4 #define INF 0x3f3f3f3f
5 using namespace std;
6 const int maxn=1e7+5;
7 int v[maxn],w[maxn],p[maxn];
8 int main(){
9 //while(1){
10 // memset(w,0,sizeof(w));
11 // memset(v,0,sizeof(v));
12 // memset(p,0,sizeof(p));
13 int n,a,maxx=0;
14 scanf("%d",&n);
15 for(int i=1;i<=n;++i)
16 {
17 scanf("%d",&a);
18 v[a]=1;
19 maxx=max(maxx,a);
20 }
21 int ans=0,i;
22 for(i=1;i<=maxx;++i){
23 if(v[i]){
24 w[i]=w[i-1]+1;
25 }
26 else {
27 //printf("%d**\n",w[i-1]);
28 p[w[i-1]]++;
29 ans=max(ans,w[i-1]);
30 }
31 }
32 p[w[i-1]]++;
33 ans=max(ans,w[i-1]);
34
35 for(int i=1;i<=ans;++i){
36 while(p[i])
37 {
38 if(i==ans && p[i]==1)
39 printf("%d\n",i);
40 else
41 printf("%d ",i);
42 p[i]--;
43 }
44 }
45 // }
46
47 return 0;
48 }
c格式代码:
1 #include <stdio.h>
2 #include<string.h>
3 #define maxn 10000000+5
4 int v[maxn],w[maxn],p[maxn];
5 int max(int x,int y){
6 if(x>y) return x;
7 else return y;
8 }
9 int main(){
10 int n,a,maxx=0;
11 scanf("%d",&n);
12 for(int i=1;i<=n;++i)
13 {
14 scanf("%d",&a);
15 v[a]=1;
16 maxx=max(maxx,a);
17 }
18 int ans=0,i;
19 for(i=1;i<=maxx;++i){
20 if(v[i]){
21 w[i]=w[i-1]+1;
22 }
23 else {
24 p[w[i-1]]++;
25 ans=max(ans,w[i-1]);
26 }
27 }
28 p[w[i-1]]++;
29 ans=max(ans,w[i-1]);
30
31 for(int i=1;i<=ans;++i){
32 while(p[i])
33 {
34 if(i==ans && p[i]==1)
35 printf("%d\n",i);
36 else
37 printf("%d ",i);
38 p[i]--;
39 }
40 }
41 return 0;
42 }
生成数据的代码:
1 #include <bits/stdc++.h>
2 #include<fstream>
3 #define INF 0x3f3f3f3f
4 using namespace std;
5 const int maxx=1e7;
6 const int minn=1;
7 const int N=4;
8 int w[maxx+5],p[maxx+5],v[maxx+5];
9 string getname(int i, string a)
10 {
11 stringstream ss;
12 ss << i << a;
13 return ss.str();
14 }
15 int int_rand(int min,int max)
16 {
17 return int(min+rand()%(max-min));
18 }
19 int main(){
20 srand((unsigned)time(NULL)); //随机种子
21 //for(int i=1;i<=N;++i){
22 string name1, name2;
23 //name1 = getname(i, ".in");
24 //name2 = getname(i, ".out");
25 ofstream fp2("1.out", ios::out);
26 ofstream fp1("1.in", ios::out);
27 //fp2.open(name2, ios::out);
28
29 int n=int_rand(minn,maxx),a,maxn=0;
30 //printf("%d\n",n);
31 fp1<<n;
32 fp1<<("\n");
33 for(int i=1;i<=n;++i){
34 a=int_rand(minn,maxx);
35 //printf("%d\n",a);
36 v[a]=1;
37 maxn=max(maxn,a);
38 if(i!=n) {
39 fp1<<a<<" ";
40 }
41 else {
42 fp1<<a<<"\n";
43 }
44 }
45
46 //memset(w,0,sizeof(w));
47 //memset(v,0,sizeof(v));
48 //memset(p,0,sizeof(p));
49 //int a;
50 //for(int i=1;i<=n;++i)
51 //{
52 // scanf("%d",&a);
53 // v[a]=1;
54 // maxx=max(maxx,a);
55 //}
56 int ans=0,i;
57 for(i=1;i<=maxn;++i){
58 if(v[i]){
59 w[i]=w[i-1]+1;
60 }
61 else {
62 p[w[i-1]]++;
63 ans=max(ans,w[i-1]);
64 }
65 }
66 p[w[i-1]]++;
67 ans=max(ans,w[i-1]);
68
69 for(int i=1;i<=ans;++i){
70 while(p[i])
71 {
72 if(i==ans && p[i]==1)
73 fp2<<i<<"\n";//,printf("%d\n",i);
74 else
75 fp2<<i<<" ";//,printf("%d ",i);
76 p[i]--;
77 }
78 }
79
80
81 fp1.close();
82 //fp2.close();
83 // }
84 }
qmh的测试1的更多相关文章
- SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...
- Apache Ignite之集群应用测试
集群发现机制 在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单.而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧. 在Apache ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- TechEmpower 13轮测试中的ASP.NET Core性能测试
应用性能直接影响到托管服务的成本,因此公司在开发应用时需要格外注意应用所使用的Web框架,初创公司尤其如此.此外,糟糕的应用性能也会影响到用户体验,甚至会因此受到相关搜索引擎的降级处罚.在选择框架时, ...
- .NET Core系列 :4 测试
2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...
- 渗透测试工具BurpSuite做网站的安全测试(基础版)
渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...
- 在ubuntu16.10 PHP测试连接MySQL中出现Call to undefined function: mysql_connect()
1.问题: 测试php7.0 链接mysql数据库的时候发生错误: Fatal error: Uncaught Error: Call to undefined function mysqli_con ...
- 【初学python】使用python调用monkey测试
目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...
- CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]
上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...
随机推荐
- upload-labs 1-21关通关记录
0x01: 检查源代码,发现JS前端验证,关闭JS即可连接,或者手动添加.php,或者上传1.jpg,再抓包修改为php 0X02: if (($_FILES['upload_file']['type ...
- 最新详解android自动化无障碍服务accessibilityservice以及高版本问题_1_如何开启获得无障碍
前言 无障碍服务accessibilityservice是什么 简单来说 无障碍服务就是一个为残障人士 尤其是视觉障碍人士提供的一个帮助服务.具体就是可以识别控件 文字 可以配合语音助手 操作和 使用 ...
- 使用sqluldr2进行oracle数据库抽取时执行后无反应,也无日志
使用sqluldr2进行oracle数据库表数据抽取时遇到执行后无反应,也不报错,也无日志输出的情况. 经过排查之后发现时由于oracle账户密码快要过期导致的(这也能出问题,我服,类似的plsql连 ...
- 分布式 ID 生成算法 — SnowFlake
一.概述 分布式 ID 生成算法的有很多种,Twitter 的 SnowFlake 就是其中经典的一种. SnowFlake 算法生成 ID 的结果是一个 64bit 大小的整数,它的结构如下图: 1 ...
- SAP中数据库表长度的界定
SAP中,如何查看表和关键字的长度?通过SE11菜单栏Extras->table width 可以看到.然而SAP在系统也会将表分类,特别是在可扩展的表维护视图中,分为如下几类 ult ...
- Flask扩展点总结(信号)
信号(源码) 信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作. pip3 install blinker 根据flask项目的请求流程来进行设置扩展点 1.中间件 from ...
- 阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性公网IP是独立的公网IP资源,可以绑定到阿里云专有网络VPC类型的ECS、NAT网关、私网负载均衡SLB上,并可以动态解绑,实现公网IP和ECS、NAT网关、SLB的解耦,满足灵活管理的要求。阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性络VPC类型的E
阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性公网IP是独立的公网关.私网负载均衡SLB上,并可以动态解绑,实现公网IP和ECS.NAT网关.SLB的解耦,满足灵活管理的要求.
- Linux网络数据包的揭秘以及常见的调优方式总结
https://mp.weixin.qq.com/s/boRWlx1R7TX0NLuI2sZBfQ 作为业务 SRE,我们所运维的业务,常常以 Linux+TCP/UDP daemon 的形式对外提供 ...
- Wireshark抓包参数
目录 wireshark 抓包过滤器 一.抓包过滤器 二.显示过滤器 整理自陈鑫杰老师的wireshark教程课 wireshark 抓包过滤器 过滤器分为抓包过滤器和显示过滤器,抓包过滤器会将不满足 ...
- SpringMVC听课笔记(五:处理模型数据)
1. Spring MVC 提供了以下几种途径输出数据模型 -- ModelAndView: 处理方法返回值类型为ModelAndView 时,方法体即可通过该对象添加模型数据 -- Map及Mode ...