2018年360春招笔试题
奇虎360 2018年春招笔试题(3月31日)
题目一
题目描述
茉莉有一个画板,画板可以抽象成100行每行100个像素点的正方形。茉莉在画板上画画,一共画了n次,每次将一个矩形涂上颜色。茉莉想知道一共有多少个像素点被她涂过颜色。若一个像素点被涂了k次,那么认为有k个像素点被涂过颜色。
输入
每一行一个数T(T<=100),表示数据组数。
对于每组数据,第一行一个整数n,(1<=n<=100)
接下来n行,每行4个整数x1,y1,x2,y2(1<=x1<=x2<=100, 1<=y1<=y2<=100),表示两个矩形的两个对角所对应的像素点的坐标。
输出
对于每组数据,输出一行,表示茉莉一共涂了多少个像素点。
样例输入
2
2
1 1 2 3
2 2 3 3
2
1 1 3 3
1 1 3 3
样例输出
10
18
AC 代码
# include<iostream>
# include<math.h>
# include<vector>
using namespace std;
int main(){
int group;
cin>>group;
vector<int> result;
while(group--){
int n;
cin>>n;
int sum = 0;
while(n--){
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
sum += (abs(x2-x1)+1) * (abs(y2-y1)+1);
}
result.push_back(sum);
}
for(auto x:result)
cout<<x<<endl;
// system("pause");
}
题目二
题目描述
茉莉邀请她的朋友参加周末派对,茉莉买了3种颜色的气球,现在她要有这些气球来装饰餐桌,每个餐桌只用恰好3个气球来装饰,要求3个气球颜色不能完全一样,可以是2或3种颜色,茉莉想知道这些气球最多能装饰多少张餐桌。
输入
第一行一个数T(T<=100),表示数据组数。
对于每组数据,第一行3个整数r,g,b,分别表示三种颜色的气球个数(0<=r,g,b<=2*10^9)
输出
对于每组数据,输出一行,一个整数表示最多能装饰的餐桌数量。
样例输入
2
5 4 3
2 3 3
样例输出
4
2
AC代码
# include<iostream>
# include<vector>
# include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
vector<long long> result;
while(n--){
vector<long long> rgb(3,0);
for(int i = 0; i<3; i++)
cin>>rgb[i];
sort(rgb.begin(), rgb.end());
if( (rgb[2]>>1) < rgb[0]+rgb[1] )
result.push_back((rgb[0] + rgb[1] + rgb[2])/3);
else
result.push_back(rgb[0] + rgb[1]);
}
for(auto x:result)
cout<<x<<endl;
// system("pause");
}
参考自这里
题目三
题目描述
给你一个图,0节点连接一个联通块a,1节点连接一个联通块b,ab仅仅由01这条边相连。
现在我们定义奇异路径为恰好经过0-1这条边一次的路径,其他边可以经过任意次,且路径不带方向,1-2-3与3-2-1认为是两条路径。重边也算多条路径。
在这个图中有无数条奇异路径,问第k短的奇异路径长度是多少?
输入
输入若干行,第一行有3个正整数n,m,k,表示有n个节点,0~n-1,有m条边,问第k长。接下来有m行u,v表示边,保证0-1边只出现一次,保证a,b联通块只通过0-1相连。
输出
输出一行表示答案。
样例输入
5 4 10
0 1
0 2
1 3
1 4
样例输出
3
题目四 交易
题目描述
茉莉发起了一场交易,她将她的5个朋友聚在一起准备进行一场交易。交易开始前,大家各有b(b>0)个硬币,交易后,每个人有ai个硬币。由于硬币不方便携带,在交易过程中可能丢失。现在茉莉想知道是否一定会丢失硬币,或者在可能没有丢失硬币的情况下,交易前每个人的硬币数b。茉莉只是组织者,不参与交易。
输入
第一行一个数T(T<=100),表示数据组数。
对于每组数据,第一行5个整数,第i个整数ai表示交易后第i个朋友的硬币数。(0<=ai<=100)
输出
对于每组数据,输出一行,若一定丢失硬币则输出-1,若尽可能没有丢失,则输出b。
样例输入
2
2 5 4 0 4
4 5 9 2 1
样例输出
3
-1
思路
看起来只要每行加起来模5等于0就没有丢失,比如第一行加起来是15,除以5等于3,第二行加起来是21,除以5除不尽,所以输出-1.
注意要考虑全0的情况,全0模5也是0,但是因为b>0,现在全0了,说明一定发生了丢失,所以不能输出0,而应该输出-1.
AC 代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = -1;
while(scanner.hasNext()){
int Z = 5;
int S = scanner.nextInt();
for(int j = 0;j<S;j++) {
int[] aa = new int[Z];
int sum = 0;
int zero_count = 0;
for (int i = 0; i < Z; i++) {
aa[i] = scanner.nextInt();
if(aa[i]==0)
zero_count += 1;
sum=sum+aa[i];
}
int ave = sum%5;
if (ave == 0) {
if (zero_count==Z) {
System.out.println(-1);
}
else {
System.out.println(sum / 5);
}
} else {
System.out.println(-1);
}
}
}
}
}
题目五 赛马
题目描述
茉莉有2n匹马,每匹马都有一个速度v,现在茉莉将马分为两个队伍,每个队伍各有n匹马,两个队之间进行n场比赛,每场比赛两队各派出一匹马参赛,每匹马都恰好出场一次。茉莉想知道是否存在一种分配队伍的方法使得无论怎么安排比赛,第一个队伍都一定能获的全胜,两匹马若速度一样,那么速度快的获胜,若速度一样,则都有可能获胜。
输入
第一行一个数T(T<=100),表示数据组数。
对于每组数据,第一行一个整数n,(1<=n<=100)
接下来一行,2n个整数,第i个整数vi表示第i匹马的速度(1<=vi<=1000)
输出
对于每组数据,输出一行,若存在一种分配方法使得第一个队伍全胜输出YES,否则输出NO
样例输入
2
2
1 2 3 4
1
1 1
样例输出
YES
NO
思路
先将数组排序,分成两半(各n),若左边最后一个元素小于右边第一个元素,就能保证不管怎么比赛都能全胜。
AC代码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
int S = scanner.nextInt();//第一行输入数据组数
for(int j = 0;j<S;j++) {
int Z = scanner.nextInt();//每组的个数(为n)
int[] aa = new int[2*Z];
int sum = 0;
for (int i = 0; i < 2*Z; i++) {
aa[i] = scanner.nextInt();
}
Arrays.sort(aa);
if (aa[Z-1]<aa[Z]) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
}
}
玫瑰花
题目描述
有K种不同的玫瑰花,现在要摆放在N各位置,要求每种颜色的花至少出现过一次,请问有多少种不同的方案数呢?因为答案可能很大,你需要输出它对772235取余后的结果。
输入
输入只有1行,分别有两个整数N,K(1<=N<=50000,1<=K<=30)
输出
输出一行表示答案
样例输入
3 2
样例输出
6
思路
先保证N中有K个位置上一定是每一种颜色的球,然后N-K位置上随便排。
注意边界条件,若K>N直接输出0,若N=K输出1,若K=0或者N=0输出0.
上一篇: Win10 19H2抵达发布预览通道:预计下月转正RTM
下一篇: 人们减肥时吃什么水果效果是最好的