`
Simone_chou
  • 浏览: 192661 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Shaking Your Cellphone(并查集 + STL)

 
阅读更多
C - Shaking Your Cellphone
Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu
Submit Status Practice UESTC 1700

Description

Do you know a software called "WeiXin", a kind of chatting tool? There is an application called "Shaking for a while". Once you shake your cellphone, you can find those who shake their cellphone at same time.
One day when Tom was shaking his cellphone, he thought about a problem: how large the friends group would be if everyone made friends once they find others who shake cellphone at same time and combine their friends group?
We assume all the people are lonely and have no friends at the beginning. In other word, their friends group only contains themselves.

Input

First line contains an integer T (0 < T <= 10), indicate there are T cases.
For each case, the first line contains an integer N (0 < N <= 1000), indicate the number of people who would shake their cellphone.
Then follows N lines. Every line comes with an integer K[i] (0 <= K[i] <= 1440), indicate the i-th person shakes cellphone K times a day. Then follows K[i] strings shown as "HH:MM", indicate the time the i-th person shakes cellphone.

Output

For each test case, the first line contains an integer X indicate how many friends group amount the people; the second line comes X integers in nondescending order, indicate the scale of each friends group.

Sample Input

1
4
3 00:00 00:01 00:02
2 00:01 00:03
1 00:03
1 00:04

Sample Output

2
1 3 

    题意:

    有T(0到10)个case,每个case包含N(0到1000)人。然后给出每个人摇手机的时间,每个人开始有一个K(一到1440),说明摇了K次,给出每次的时间点。在所有人中,在相同时间点摇的人属于同一朋友圈的人。输入所有数据后,输出总共的朋友圈数,再按非降序顺序输出每个朋友圈的人数。

  

    思路:

    输入的时间段是字符串,拆开的话感觉不好处理,所以干脆就整体来处理,用map关联容器对这个时间点和第一次在这个时间点摇动手机的人进行配对,以后再出现有相同的时间,那么就先判断这个人与第一个在这个时间摇动手机的人是否根节点相同,如果相同则不用合并,不相同则合并起来,合并的时候用num数组来登记该根节点下的数量。

    最后循环一次,找出root[i]==i的节点(该结点为根节点),将num数量(num数量是这个朋友圈的总数)移到head数组中,同时用k登记总共有几个朋友圈,对head进行排序。最后输出k和循环输出head数组即为所求。

 

    AC:

#include<cstdio>
#include<map>
#include<string>
#include<algorithm>
#define max 1000+5
using namespace std;
int root[max],num[max],head[max];

int find(int a)
{
	if(root[a]==a) return a;
	int r=find(root[a]);
	root[a]=r;
	return r;
}

int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n;
		map<string,int> m;
		m.clear();
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		  root[i]=i,num[i]=1,head[i]=0;
		for(int i=1;i<=n;i++)
		{
			int ti;
			scanf("%d",&ti);
			while(ti--)
			{
			  char time[10];
			  scanf("%s",time);
			  if(m.find(time)!=m.end())
//如果这个时间段有出现过
			  	{
			  		int a,b;
			  		a=find(i);
			  		b=find(m[time]);
			  		if(a!=b)
			  		{
			  		root[a]=b;
			  		num[b]+=num[a];
			  		}
				}
			  else m[time]=i;
//没有出现过则登记这个人
			}
		}
		int k=0;
		for(int i=1;i<max;i++)
		 if(root[i]==i)  head[k++]=num[i];
		sort(head,head+k);
		printf("%d\n",k);
		for(int i=0;i<k;i++)
		  {
		  	printf("%d",head[i]);
		  	i==k-1?printf("\n"):printf(" ");
		  }
	}
	return 0;
}

 

   总结:

   WA了一次是忘了写条件if(a!=b)的时候,就是当根节点不相同的时候才合并,才根节点数量增加。如果不加条件,就是无论根节点相不相同都合并,虽然不会影响合并结果,但是会影响num数量,等于加多了一次,如果以后还有相同的,则会越加越多。细心。

分享到:
评论

相关推荐

    webpack使用使用TreeShaking实例

    在Tree Shaking中,Babel需要配置`@babel/preset-env`,并设置`useBuiltIns`为`'usage'`或`'entry'`,这样可以确保只引入实际使用到的polyfills,避免引入不必要的代码。 在`util.js`中,你可以编写一些可复用的...

    浅析webpack 如何优雅的使用tree-shaking(摇树优化)

    主要介绍了webpack 如何使用tree-shaking(摇树优化),本文介绍了什么是tree-shaking,commonJS 模块,es6 模块,怎么使用tree-shaking等,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。

    Shaking AlertView(iPhone源代码)

    来源:Licence:MIT平台:iOS设备:iPhone / iPad作者: Luke  输入密码时,弹出密码输入框(一个UIAlertView),如果密码输入错误,密码输入框... Code4App编译测试,适用环境:Xcode 4.5, iOS 6.0。

    webpack4 CSS Tree Shaking的使用

    在webpack4中实现CSS Tree Shaking的关键知识点涵盖了模块打包优化、CSS处理与Tree Shaking原理、webpack插件和loader的使用,以及PurifyCSS工具的应用。以下将详细解读这些知识点: **webpack4 CSS Tree Shaking的...

    Tree-shaking性能优化实践.pdf

    Tree Shaking是一种优化技术,主要用于JavaScript模块打包过程中,目的是移除项目中未使用的代码,从而减少最终输出的文件大小,提升应用的加载速度和性能。这个概念在现代前端开发中尤其重要,因为随着应用程序的...

    Powermode 输入效果,shaking,shaking!.zip

    "Shaking, shaking!" 描述的是Powermode的一个显著特征,可能指的是在用户打字时,屏幕会模拟出轻微的震动或抖动效果,营造出一种仿佛键盘在手部下方震动的沉浸式体验。 在Powermode-master这个压缩文件中,我们...

    前端大厂最新面试题-treeshaking.docx

    如果把代码打包比作制作蛋糕,传统的方式是把鸡蛋(带壳)全部丢进去搅拌,然后放入烤箱,最后把(没有用的)蛋壳全部挑选并剔除出去,而 Tree Shaking 则是一开始就把有用的蛋白蛋黄(import)放入搅拌,最后直接...

    PSOMATLAB_psomatlab_dpsoMATLAB_shaking7zb_

    本项目标题"PSOMATLAB_psomatlab_dpsoMATLAB_shaking7zb_"似乎是一个基于MATLAB实现的PSO算法,可能包含了多种变种或扩展,如DPSO(动态粒子群优化)和"shaking7zb",后者可能是作者自定义的一种优化策略或调整。...

    WM_09_tree_shaking_打包库_gzip等其他优化1

    在JavaScript中,Tree Shaking主要得益于ES Module的静态分析特性,使得打包工具如rollup、webpack能够识别并移除未被引用的模块。 webpack自2.0版本开始内置支持ES2015模块,并具备检测未使用模块的功能。在...

    浅谈Webpack4 Tree Shaking 终极优化指南

    Tree Shaking,直译为“摇树”,是一种通过静态分析代码中未被使用的代码并将其删除的技术,从而使打包后的应用体积更小,运行更快。Tree Shaking的概念最早由Rollup提出,但随着Webpack 2的发布,这一技术也得以在...

    svga_shaking

    svga 资源shaking,svga 资源shakingsvga 资源shakingsvga 资源shakingsvga 资源shakingsvga 资源shakingsvga 资源shakingsvga 资源shakingsvga 资源shakingsvga 资源shakingsvga 资源shaking

    Web-pack新版教程24 tree shaking.mp4

    Web-pack新版教程24 tree shaking.mp4

    webpack的tree shaking的实现方法

    webpack的tree shaking util.js export const a = () =&gt; { console.log("a123456方法"); }; export const b = () =&gt; { console.log("b123456方法"); }; main.js import {a} from './utils'; a(); side...

    实验3 按键输入_stm32_diez77_shaking9po_

    实验3 按键输入是STM32微控制器学习中的一个重要环节,主要涉及STM32的GPIO(General Purpose Input/Output)接口的使用,以及基于Diez77开发板和Shaking9Po传感器的硬件交互。这个实验的目标是通过编程实现对按键的...

    从头来vue2webpack2treeshakingUnittest

    同时,新增了侦听器(Watchers),可以监听并响应数据的变化,执行相应的回调函数。 5. **组件设计**:Vue2.0强调组件化开发,允许创建可复用的自定义元素。组件可以拥有自己的状态、事件和生命周期方法,通过props...

    gsap-treeshaking

    【标题】:“gsap-treeshaking”是一个关于JavaScript优化技术的主题,主要涉及GSAP(GreenSock Animation Platform)库在项目构建过程中的 treeshaking 优化。 【描述】:“gsap-treeshaking”提示了如何通过npm...

    wechat_shaking

    标题“wechat_shaking”指的是一个基于微信平台的小型功能,可能是微信中的“摇一摇”功能。这个功能在微信用户间非常流行,它允许用户通过摇动手机来与其他用户互动或者参与各种活动。在这个项目中,开发者可能创建...

    vue+iview后台管理模板 它基于Vue.js并使用UI工具包iView

    Vue.js和iView都有相应的策略和插件支持,如Vue Router的异步加载、Vue的Tree Shaking等。 总之,“vue+iview后台管理模板”是一个基于Vue.js和iView的高效开发起点,它为构建功能丰富的后台管理系统提供了快捷通道...

Global site tag (gtag.js) - Google Analytics