博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
统计数字
阅读量:5237 次
发布时间:2019-06-14

本文共 1850 字,大约阅读时间需要 6 分钟。

原题链接:

纪念开学第一天,随手A掉一道大水题纪念一下。

题意非常明显,让我们排序并且统计数字,但数据量较大。

一开始想到最暴力的桶排序,但发现桶排序开不了那么大的数组,A不掉。

遂STL快排解决之。问题就在如何统计重复数字上。

受到夏令营day1t1启发,快排后统计数字,每次和前边的进行比较,如果相等则当前数字重复,开一个vis数组打上标记,开一个b数组外带一个附带指针t,用来记录重复数字重复出现了几次。如果比较时发现数字不一致,就让t++,这样t最后记录的就是重复数字的数量。

输出这里,因为有两个循环控制变量,在冥思苦想for无果之后决定请出while(1)老爷子来。在循环外有一个变量i初值为1,一个变量st初值为0,分别控制输出数和输出数的个数。

如果发现有一个数没有打标记,那么这个数应该输出,输出的同时输出b[++st]+1。加1的原因是b只记录了重复数字出现了几次,没有算上原来的数,所以输出时要+1。输出一次后i++,判断st是不是≥t,如果是则说明所有数都输出完了(想一想,为什么),如果不是则继续输出。

这里有一个提速小技巧,在for的时候我使用了「寄存器变量」register int,这类变量不存放在内存里,而存放在cpu的寄存器里。大家应该知道寄存器的存取速度要比内存快的吧,这样定义变量可以加速操作。但是,register只能用于整型,字符型或指针型变量,而且,根据cpu的不同,寄存器变量一般只能同时开2~3个,如果你超出了这个限制,那么程序会自动把多的寄存器变量变成自动变量auto(不知道这是啥的同学自己去网上搜一下吧,我就不多展开了)。

AC代码:

1 #include 
2 #include
3 #define maxn 200005 4 using namespace std; 5 long long int a[maxn]; 6 long long int b[maxn]; 7 bool vis[maxn]; 8 long long int n,t=1; 9 inline long long int read(){10 long long int num = 0;11 char c;12 bool flag = false;13 while ((c = getchar()) == ' ' || c == '\n' || c == '\r');14 if (c == '-') flag = true;15 else16 num = c - '0';17 while (isdigit(c = getchar()))18 num = num * 10 + c - '0';19 return (flag ? -1 : 1) * num;20 }21 int main(){22 ios::sync_with_stdio(false);23 n = read();24 for (register int i=1;i<=n;i++){25 a[i] = read();26 }27 sort(a+1,a+n+1);28 for (register int i=2;i<=n;i++){29 if (a[i] == a[i-1]){30 b[t]++;31 vis[i] = true;32 }33 else34 t++;35 }36 int i = 1;37 int st = 0;38 while(1){39 if (!vis[i])40 cout << a[i] << " " << b[++st]+1 << endl;41 i++;42 if (st >= t)43 break;44 } 45 return 0;46 }

 

转载于:https://www.cnblogs.com/OIerShawnZhou/p/7465539.html

你可能感兴趣的文章
Android程序对不同手机屏幕分辨率自适应的总结
查看>>
分治法
查看>>
java并发值多线程同步业务场景以及解决方案
查看>>
Android开发——LinearLayout和RelativeLayout的性能对比
查看>>
URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致(两种解决方法)
查看>>
百度UEditor上传图片-再总结一次
查看>>
Redis集群
查看>>
uwsgi基础——服务状态
查看>>
python引入模块
查看>>
初识dubbo(一)
查看>>
没加载redis类,却可以实例化redis
查看>>
软链接mongo
查看>>
时间戳转换
查看>>
hdu 4044 树形DP 炮台打怪 (好题)
查看>>
HDU3336 - Count the string
查看>>
VS2017提醒找不到MSVCR110D.dll
查看>>
[转][Java]简单标签库简介
查看>>
20145206邹京儒 web安全基础实践
查看>>
【python 3.6】如何将list存入txt后,再读出list
查看>>
百度地图API
查看>>