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 系统.所以就把 ...
随机推荐
- MBAir下安装httprunner2.5.7 har2case 出现zsh: command not found解决方案
MBAir下python3.8安装httprunner2.5.7 出现zsh: command not found find / -name hrun查找到路径为: /Users/w550856/Li ...
- os.walk() 遍历目录下的文件夹和文件
os.walk(top, topdown=True, onerror=None, followlinks=False) top:顶级目录 os.walk()返回一个三元tupple(dirpath, ...
- Nginx报504 gateway timeout错误的解决方法(小丑搞笑版。。。)
一.今天登录我的网站,突然发现报了下面的一个错误: 我的第一反应是:超时了应该是Nginx代理没有设置超时时间,默认的超时时间估计太小了,然后就按照正常的方式用Xshell连接服务器,应该是网络或者是 ...
- Ubuntu18.04完全卸载mysql5.7并安装mysql8.0的安装方法
Ubuntu18.04版本下,如果直接输入: sudo apt install mysql-server 命令,会默认安装mysql5.7版本,安装过程并没有提示输入密码,安装完成后也无法正常登录,这 ...
- Py迭代和迭代器,生成器,生产者和消费者模型
迭代器iter 1.迭代的含义: 每次生成的结果依赖于上一次.问路,先问第一个人,第一个人不知道他就说第二个人知道,然后去找第二个人.第二个人不知道就说第三个人知道,然后去找第三个人 2.递归的含义: ...
- 扩展PE头属性说明
CRC检测的算法就是checksum 以下是DllCharacteristics的参数说明
- Error Code: 2006 - MySQL 5.7 server has gone away
使用 Navicat 执行 sql 脚本失败 出现 Error Code: 2006 - MySQL server has gone away 原因 当MySQL客户端或mysqld服务器收到大于ma ...
- Dubbo 最基本的几个需求
需求 http://dubbo.apache.org/zh-cn/docs/user/preface/requirements.html 在大规模服务化之前,应用可能只是通过 RMI 或 Hessia ...
- How Load Balancing Policies Work
How Load Balancing Policies Work https://docs.cloud.oracle.com/en-us/iaas/Content/Balance/Reference/ ...
- Location和Content-Location
div.example { background-color: rgba(229, 236, 243, 1); color: rgba(0, 0, 0, 1); padding: 0.5em; mar ...