欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2018年360春招笔试题

程序员文章站 2022-04-02 18:25:57
...

奇虎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.

相关标签: 笔试题