名企笔试:Aamazon笔试题(Number of Groups )
来源:互联网 发布:紫云剑淘宝 编辑:程序博客网 时间:2024/05/18 17:24
Aamazon笔试题(Number of Groups )
题意:
Given an array Arr[] of N distinct integers. Write a program to find the count of groups of 2 or 3 integers that can be formed by choosing integers from the given array such that sum of integers in each of the group is divisible by three.
给你一个带有N个不同整数的数组,问能够选择出来多少组只有2个或者3个的组的和被3整除。
输入描述:
第一行表示测试的组数,第二行是n的大小,接下来是输入数组。
输出描述:
每一测试输出一个数,表示组数。
Constraints:
1<=T<=100
1<=N<=105
1<=Arr[i]<=105
Example:
Input:
2
6
1 5 7 2 9 14
4
3 6 9 12
Output:
13
10
分析:
暴力解决问题?当然可以。只需要一个两层训练+一个三层循环就直接出来结果。但是出来在笔试或者面试时,只给出这种答案,面试官可是不怎么高兴的,而且对于本题的数组范围,应该也会超时。解决这个题,我们有一个有关余数的定理,对于一个k,如果n%k = a,m%k = b,则有(n+m) % k = (n%k + m%k) % k = (a+b) % k,如果(a+b)%k = 0,则有(n+m)%k = 0。有了上面这个定理,我们只需要纪录数组中余数0,1,2的个数,从0,1,2中进行2个数或者3个数的组合计数,就可以得到结果,能够被3整除的情况共有如下几种:
1、 0+0 (选择两个能够被三整除的数)
2、 0+0+0 (选择3个能够被三整除的数)
3、 1+2 (选择1个余数是1的数和一个余数是2的数)
4、0+1+2 (选择1个余数是1的数和一个余数是2的数和一个余数是0的数)
5、 1+1+1 (选择3个余数是1的数)
6、 2+2+2 (选择3个余数是2的数)
假如数组c[3]表示余数的个数,c[0]表示余数是0的个数,c[1]表示余数是1的个数,c[2]表示余数是2的个数,上述对应的情况的个数如下:
1、 c[0]*(c[0]-1)/2
2、 c[0](c[0]-1)(c[0]-2) / 6;
3、 c[1]*c[2];
4、 c[0]*c[1]*c[2];
5、 c[1](c[1]-1)(c[1]-2) / 6;
6、 c[2](c[2]-1)(c[2]-2) / 6;
相加就得到结果。
Code:
/** *Author: xiaoran *座右铭:既来之,则安之 *//** * *从一个数组中,选出2或者3个数,使得他们的和能够被3整除, * 为有多少中选择的方式。 * 余数定理,如果a % 3 = 1,b % 3 = 2则 (a+b)%3=0 * 我们只需要纪录每个数模3之后的余数的个数,从余数中进行2、3组合即可 * 共有以下集中情况:直接用0,1,2表示余数为0,1,2的数字 * 1、 0+0 (选2个能够被3整除的数) * 2、 0+0+0 (选3个能够被3整除的数) * 3、 1+2 * 4、 0+1+2 * 5、 1+1+1 * 6、 2+2+2 */#include<iostream>#include<stdio.h>#include<algorithm>#include<math.h>#include<set>#include<map>#include<vector>#include<string>#include<string.h>using namespace std;typedef long long LL;const int MAXN = 1005;int main() { //code int t,n,x; cin>>t; while(t--){ cin>>n; int c[3] = {0}; for(int i=0;i<n;i++){ cin>>x; c[x%3]++; } int sum = 0; // 按照上述的情况进行加法原则 sum += c[0]*(c[0]-1) / 2; sum += c[0]*(c[0]-1)*(c[0]-2) / 6; sum += c[1]*c[2]; sum += c[0]*c[1]*c[2]; sum += c[1]*(c[1]-1)*(c[1]-2) / 6; sum += c[2]*(c[2]-1)*(c[2]-2) / 6; cout<<sum<<endl; } return 0;}
- 名企笔试:Aamazon笔试题(Number of Groups )
- 名企面试:Aamazon笔试题(Find median in a stream )
- 名企笔试题
- 名企的笔试口试题 (Tribonacci Number)
- 名企笔试:2016网易招聘笔试题(奖学金)
- 名企笔试:Amazon笔试题(Count the elements)
- 名企编程笔试题
- 名企笔试
- 名企笔试:2015携程Java工程师笔试题
- 名企笔试:支付宝笔试题(趣味发红包问题)
- 名企笔试:乐视2017暑假实习生笔试题(有序数组)
- 名企笔试:搜狐2016研发工程师笔试题(最高罗汉塔)
- 名企笔试:京东 2016 算法工程师笔试题(登楼梯)
- 名企笔试:2015小米暑期实习笔试题(二进制) 2017-04-05 算法爱好者
- 名企笔试:360研发工程师笔试题(挑选镇长)2017-03-14 算法爱好者
- 名企笔试:2016网易笔试题(路灯)2017-05-16 算法爱好者
- 名企笔试:2016网易笔试题(奖学金)2017-05-12 算法爱好者
- 名企笔试:网易游戏2016招聘笔试题(双核处理)
- C#Winform中窗体的美化
- Opencv 各种特征点提取和匹配
- StringBuffer[]以及ArrayList[]的处理的注意事项
- HTML笔记(HTML样式简介,字体基于内容的样式与物理样式、字符实体)
- 20170701Windows10_06_线程函数、原子操作问题分析
- 名企笔试:Aamazon笔试题(Number of Groups )
- Bootstrap fileinput 使用心得
- 排序查找算法大总结
- PHP的中间件-ICE
- present,dismiss到任意控制器
- 简单对输入判断
- 用JQuery如何遍历多个select的同时遍历每一个select的option
- Mybatis 配置文件 useGeneratedKeys 参数
- 另类的"APP常驻"——UIStateRestoration