题目:传送门

首先输入一个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这个数在我们输入的数据中

代码:

  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. {
  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. }

这样处理过之后我们发现完成了去重和排序

  1. for(int i=1;i<=maxx;++i)
  2. {
  3. if(v[i]>0)
  4. {
  5. printf("%d ",i);
  6. }
  7. }
  8. printf("\n");

你可以用这个代码把v数组打印出来结果会是1 2 4 5 7

之后我们就要求它的连续长度,这个时候就新定义一个数组w和p

  1. int ans=0,i;
  2. for(i=1;i<=maxx;++i){
  3. if(v[i]){
  4. w[i]=w[i-1]+1;
  5. }
  6. else {
  7. p[w[i-1]]++;
  8. ans=max(ans,w[i-1]); //我们把
  9. }
  10. }
  11. 下标 0 1 2 3 4 5 6 7 8 9
  12. v中的值:0 1 1 0 1 1 0 1 0 0
  13. w初始值:0 0 0 0 0 0 0 0 0 0
  14. 处理后w0 1 2 0 1 2 0 1 0 0
  15. w[1,7]这个下标内的,所有0之前的值都存起来,因为它就是那个连续长度
  16. 2 2 1 这个1不在0之前但是它也是连续长度,我们也要把它取出来
  17. 第一个2是{12}这两个数的两个数的连续长度。
  18. 第二个2是{45}这两个数的连续长度
  19. 第三个数1是{7}这1个数的连续长度

这样的话,我们就会得到2 2 1这个结果,但是我们还要对它排序后再输出。这里又要用到木桶排序

但是我已经把它们放在木桶p里面了

  1. int ans=0,i;
  2. for(i=1;i<=maxx;++i){
  3. if(v[i]){
  4. w[i]=w[i-1]+1;
  5. }
  6. else { //else就是出现了断点0
  7. p[w[i-1]]++; //把这个数用木桶存起来
  8. ans=max(ans,w[i-1]); //找到这个木桶的右端点 ,以便我们下一步输出的时候去枚举
  9. } //因为木桶排序是把这个数当作下标,所以要找右端点只需要看你需要用到的最大下标是多少
  10. }

下标:      0 1 2 3 4

p初始值:0 0 0 0 0

处理后p:0 1 2 0 0

之后就打印出就可以了,注意格式:

  1. p[w[i-1]]++;
  2. ans=max(ans,w[i-1]); //不加这两行代码的话,这个样例中的1,就会没有放到木桶p中
  3.  
  4. for(int i=1;i<=ans;++i){
  5. while(p[i])
  6. {
  7. if(i==ans && p[i]==1)
  8. printf("%d\n",i);
  9. else
  10. printf("%d ",i);
  11. p[i]--;
  12. }
  13. }

总代码:用c++格式提交

  1. 1 #include <stdio.h>
  2. 2 #include<string.h>
  3. 3 #include <iostream>
  4. 4 #define INF 0x3f3f3f3f
  5. 5 using namespace std;
  6. 6 const int maxn=1e7+5;
  7. 7 int v[maxn],w[maxn],p[maxn];
  8. 8 int main(){
  9. 9 //while(1){
  10. 10 // memset(w,0,sizeof(w));
  11. 11 // memset(v,0,sizeof(v));
  12. 12 // memset(p,0,sizeof(p));
  13. 13 int n,a,maxx=0;
  14. 14 scanf("%d",&n);
  15. 15 for(int i=1;i<=n;++i)
  16. 16 {
  17. 17 scanf("%d",&a);
  18. 18 v[a]=1;
  19. 19 maxx=max(maxx,a);
  20. 20 }
  21. 21 int ans=0,i;
  22. 22 for(i=1;i<=maxx;++i){
  23. 23 if(v[i]){
  24. 24 w[i]=w[i-1]+1;
  25. 25 }
  26. 26 else {
  27. 27 //printf("%d**\n",w[i-1]);
  28. 28 p[w[i-1]]++;
  29. 29 ans=max(ans,w[i-1]);
  30. 30 }
  31. 31 }
  32. 32 p[w[i-1]]++;
  33. 33 ans=max(ans,w[i-1]);
  34. 34
  35. 35 for(int i=1;i<=ans;++i){
  36. 36 while(p[i])
  37. 37 {
  38. 38 if(i==ans && p[i]==1)
  39. 39 printf("%d\n",i);
  40. 40 else
  41. 41 printf("%d ",i);
  42. 42 p[i]--;
  43. 43 }
  44. 44 }
  45. 45 // }
  46. 46
  47. 47 return 0;
  48. 48 }

c格式代码:

  1. 1 #include <stdio.h>
  2. 2 #include<string.h>
  3. 3 #define maxn 10000000+5
  4. 4 int v[maxn],w[maxn],p[maxn];
  5. 5 int max(int x,int y){
  6. 6 if(x>y) return x;
  7. 7 else return y;
  8. 8 }
  9. 9 int main(){
  10. 10 int n,a,maxx=0;
  11. 11 scanf("%d",&n);
  12. 12 for(int i=1;i<=n;++i)
  13. 13 {
  14. 14 scanf("%d",&a);
  15. 15 v[a]=1;
  16. 16 maxx=max(maxx,a);
  17. 17 }
  18. 18 int ans=0,i;
  19. 19 for(i=1;i<=maxx;++i){
  20. 20 if(v[i]){
  21. 21 w[i]=w[i-1]+1;
  22. 22 }
  23. 23 else {
  24. 24 p[w[i-1]]++;
  25. 25 ans=max(ans,w[i-1]);
  26. 26 }
  27. 27 }
  28. 28 p[w[i-1]]++;
  29. 29 ans=max(ans,w[i-1]);
  30. 30
  31. 31 for(int i=1;i<=ans;++i){
  32. 32 while(p[i])
  33. 33 {
  34. 34 if(i==ans && p[i]==1)
  35. 35 printf("%d\n",i);
  36. 36 else
  37. 37 printf("%d ",i);
  38. 38 p[i]--;
  39. 39 }
  40. 40 }
  41. 41 return 0;
  42. 42 }

生成数据的代码:

  1. 1 #include <bits/stdc++.h>
  2. 2 #include<fstream>
  3. 3 #define INF 0x3f3f3f3f
  4. 4 using namespace std;
  5. 5 const int maxx=1e7;
  6. 6 const int minn=1;
  7. 7 const int N=4;
  8. 8 int w[maxx+5],p[maxx+5],v[maxx+5];
  9. 9 string getname(int i, string a)
  10. 10 {
  11. 11 stringstream ss;
  12. 12 ss << i << a;
  13. 13 return ss.str();
  14. 14 }
  15. 15 int int_rand(int min,int max)
  16. 16 {
  17. 17 return int(min+rand()%(max-min));
  18. 18 }
  19. 19 int main(){
  20. 20 srand((unsigned)time(NULL)); //随机种子
  21. 21 //for(int i=1;i<=N;++i){
  22. 22 string name1, name2;
  23. 23 //name1 = getname(i, ".in");
  24. 24 //name2 = getname(i, ".out");
  25. 25 ofstream fp2("1.out", ios::out);
  26. 26 ofstream fp1("1.in", ios::out);
  27. 27 //fp2.open(name2, ios::out);
  28. 28
  29. 29 int n=int_rand(minn,maxx),a,maxn=0;
  30. 30 //printf("%d\n",n);
  31. 31 fp1<<n;
  32. 32 fp1<<("\n");
  33. 33 for(int i=1;i<=n;++i){
  34. 34 a=int_rand(minn,maxx);
  35. 35 //printf("%d\n",a);
  36. 36 v[a]=1;
  37. 37 maxn=max(maxn,a);
  38. 38 if(i!=n) {
  39. 39 fp1<<a<<" ";
  40. 40 }
  41. 41 else {
  42. 42 fp1<<a<<"\n";
  43. 43 }
  44. 44 }
  45. 45
  46. 46 //memset(w,0,sizeof(w));
  47. 47 //memset(v,0,sizeof(v));
  48. 48 //memset(p,0,sizeof(p));
  49. 49 //int a;
  50. 50 //for(int i=1;i<=n;++i)
  51. 51 //{
  52. 52 // scanf("%d",&a);
  53. 53 // v[a]=1;
  54. 54 // maxx=max(maxx,a);
  55. 55 //}
  56. 56 int ans=0,i;
  57. 57 for(i=1;i<=maxn;++i){
  58. 58 if(v[i]){
  59. 59 w[i]=w[i-1]+1;
  60. 60 }
  61. 61 else {
  62. 62 p[w[i-1]]++;
  63. 63 ans=max(ans,w[i-1]);
  64. 64 }
  65. 65 }
  66. 66 p[w[i-1]]++;
  67. 67 ans=max(ans,w[i-1]);
  68. 68
  69. 69 for(int i=1;i<=ans;++i){
  70. 70 while(p[i])
  71. 71 {
  72. 72 if(i==ans && p[i]==1)
  73. 73 fp2<<i<<"\n";//,printf("%d\n",i);
  74. 74 else
  75. 75 fp2<<i<<" ";//,printf("%d ",i);
  76. 76 p[i]--;
  77. 77 }
  78. 78 }
  79. 79
  80. 80
  81. 81 fp1.close();
  82. 82 //fp2.close();
  83. 83 // }
  84. 84 }

qmh的测试1的更多相关文章

  1. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...

  2. Apache Ignite之集群应用测试

    集群发现机制 在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单.而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧. 在Apache ...

  3. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  4. TechEmpower 13轮测试中的ASP.NET Core性能测试

    应用性能直接影响到托管服务的成本,因此公司在开发应用时需要格外注意应用所使用的Web框架,初创公司尤其如此.此外,糟糕的应用性能也会影响到用户体验,甚至会因此受到相关搜索引擎的降级处罚.在选择框架时, ...

  5. .NET Core系列 :4 测试

    2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...

  6. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  7. 在ubuntu16.10 PHP测试连接MySQL中出现Call to undefined function: mysql_connect()

    1.问题: 测试php7.0 链接mysql数据库的时候发生错误: Fatal error: Uncaught Error: Call to undefined function mysqli_con ...

  8. 【初学python】使用python调用monkey测试

    目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...

  9. CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]

    上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...

随机推荐

  1. 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 ...

  2. os.walk() 遍历目录下的文件夹和文件

    os.walk(top, topdown=True, onerror=None, followlinks=False) top:顶级目录 os.walk()返回一个三元tupple(dirpath, ...

  3. Nginx报504 gateway timeout错误的解决方法(小丑搞笑版。。。)

    一.今天登录我的网站,突然发现报了下面的一个错误: 我的第一反应是:超时了应该是Nginx代理没有设置超时时间,默认的超时时间估计太小了,然后就按照正常的方式用Xshell连接服务器,应该是网络或者是 ...

  4. Ubuntu18.04完全卸载mysql5.7并安装mysql8.0的安装方法

    Ubuntu18.04版本下,如果直接输入: sudo apt install mysql-server 命令,会默认安装mysql5.7版本,安装过程并没有提示输入密码,安装完成后也无法正常登录,这 ...

  5. Py迭代和迭代器,生成器,生产者和消费者模型

    迭代器iter 1.迭代的含义: 每次生成的结果依赖于上一次.问路,先问第一个人,第一个人不知道他就说第二个人知道,然后去找第二个人.第二个人不知道就说第三个人知道,然后去找第三个人 2.递归的含义: ...

  6. 扩展PE头属性说明

    CRC检测的算法就是checksum 以下是DllCharacteristics的参数说明

  7. Error Code: 2006 - MySQL 5.7 server has gone away

    使用 Navicat 执行 sql 脚本失败 出现 Error Code: 2006 - MySQL server has gone away 原因 当MySQL客户端或mysqld服务器收到大于ma ...

  8. Dubbo 最基本的几个需求

    需求 http://dubbo.apache.org/zh-cn/docs/user/preface/requirements.html 在大规模服务化之前,应用可能只是通过 RMI 或 Hessia ...

  9. How Load Balancing Policies Work

    How Load Balancing Policies Work https://docs.cloud.oracle.com/en-us/iaas/Content/Balance/Reference/ ...

  10. Location和Content-Location

    div.example { background-color: rgba(229, 236, 243, 1); color: rgba(0, 0, 0, 1); padding: 0.5em; mar ...