360秋招技术岗编程题

T1

import java.util.Scanner;
public class A {
    Scanner scanner = new Scanner(System.in);
    void solve(){
        int n = scanner.nextInt();
        long x=0,y=0;
        long x1 = 1000000000;
        long x2 = -x1;
        long y1 = x1;
        long y2 = x2;
        for(int i=0;i<n;i++){
            x = scanner.nextLong();
            y = scanner.nextLong();
            x1 = Math.min(x1,x);
            x2 = Math.max(x2,x);
            y1 = Math.min(y1,y);
            y2 = Math.max(y2,y);
        }
        long ans = Math.max(Math.abs(x1-x2),Math.abs(y1-y2));
        System.out.println(ans*ans);
    }
    public static void main(String[] args) {
        new A().solve();
    }
}


T2:  暴力前缀和

import java.util.Scanner;
public class B {
    Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        new B().solve();
    }
    private void solve() {
        int n,m;
        n = scanner.nextInt();
        m =scanner.nextInt();
        int dp[][] = new int[n+1][m+1];
        for(int i=1;i<=n;i++){
            int x = scanner.nextInt();
            dp[i][x]++;
            for(int j=1;j<=m;j++)dp[i][j]+=dp[i-1][j];
        }
        int q = scanner.nextInt();
        while(q-->0){
            int l = scanner.nextInt();
            int r = scanner.nextInt();
            int ans = 0;
            for(int i=1;i<=m;i++){
                if(dp[r][i]-dp[l-1][i]>0)ans++;
            }
            System.out.println(ans);
        }
    }
}


T3:  嗯....   样例没模拟出来,,题目没说是否连续还是非连续  非连续感觉答案是4  连续又只能过第一个样例 18%

#秋招#
全部评论
第三题有点玄学,看好久都理解不透
点赞
送花
回复
分享
发布于 2018-08-27 21:16
顶大佬~第一题我用了int,,炸了,36%还找不到错在哪儿,溜了溜了
点赞
送花
回复
分享
发布于 2018-08-27 21:18
滴滴
校招火热招聘中
官网直投
输出2也是18啊
点赞
送花
回复
分享
发布于 2018-08-27 21:20
第二题C++  57%.......同样的方法Java能过    感觉对C++不太友好啊
点赞
送花
回复
分享
发布于 2018-08-27 21:20
第二题用C++的话TLE啊。。第三题压根没看懂测试用例 
点赞
送花
回复
分享
发布于 2018-08-27 21:22
顶~第一题也是用了int...凉凉
点赞
送花
回复
分享
发布于 2018-08-27 21:22
第三题什么意思有人知道吗
点赞
送花
回复
分享
发布于 2018-08-27 21:23
第二题c++。输入输出用scanf和printf就过了。呵呵呵
点赞
送花
回复
分享
发布于 2018-08-27 21:27
第三道题将第二个序列翻转一下,应该就和求最长公共子序列一样了。
点赞
送花
回复
分享
发布于 2018-08-27 21:28
第三题,是否需要考虑i,j的大小
点赞
送花
回复
分享
发布于 2018-08-27 21:29
T3通过代码,不过题目描述似乎有问题,反馈他们说没问题。 #include <iostream> #include <sstream> #include <vector> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <cstdio> #include <cstdlib> #include <stack> #include <queue> #include <map> using namespace std; #define MAXN 50010 const int INF = 1e9; int idx[MAXN]; int b[MAXN]; int a; int dp[MAXN]; int main() { int n; scanf("%d", &n); for(int i=0; i<n; i++){ scanf("%d", &a); idx[a-1] = i; } for(int i=0; i<n; i++){ scanf("%d", &a); b[i] = idx[a-1]; dp[i] = INF; // 初始化为无限大 } //最长递增子序列 int pos = 0; // 记录dp当前最后一位的下标 dp[0] = b[0]; // dp[0]值显然为a[0] for (int i = 1; i < n; i++) { if (b[i] > dp[pos]) // 若a[i]大于dp数组最大值,则直接添加 dp[++pos] = b[i]; else // 否则找到dp中第一个大于等于a[i]的位置,用a[i]替换之。 dp[lower_bound(dp, dp + pos + 1, b[i]) - dp] = b[i]; // 二分查找 } printf("%d\n", pos+1); return 0; }
点赞
送花
回复
分享
发布于 2018-08-27 21:39
第二题初始值有问题吧
点赞
送花
回复
分享
发布于 2018-08-27 23:44
第二题是dp[i][x]++而不是dp[n][x]++吧
点赞
送花
回复
分享
发布于 2018-08-28 01:12

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务