2019年360公司研发岗机试

目录

1.城市修建

2.圈地运动

3.看花

1.城市修建

读懂题目,因为是正方形,所以我们分别找横纵坐标最大最小之差平方即可。

注意大数陷阱,真阴,把int换成long即可AC

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    long N;
    cin>>N;
    long a,b;
    vector<long> width,height;
    for(long i=0;i<N;i++){
        cin>>a>>b;
        width.push_back(a);
        height.push_back(b);
    }
    sort(width.begin(),width.end());
    sort(height.begin(),height.end());
    long m = width[width.size()-1]-width[0];
    long n = height[height.size()-1]-height[0];
    long c = max(m,n);
    cout<<c*c<<endl;
    return 0;
}

2.圈地运动

我一开始的思路看前n-1个数之和是否大于第n个数

后来想想不对,应该是前n中最大的数和剩下n-1个数之和做比较

所以只对了60%

#include <iostream>
#include <vector>
using namespace std;

int main(){
    
    long n;
    cin>>n;
    long a[n];
    long b;
    vector<long> v;
    for(long i=0;i<n;i++){
        cin>>b;
        v.push_back(b);
    }
    a[0] = v[0];
    a[1] = a[0]+v[1];
    bool flag = true;
    for(long i=2;i<n;i++){
        a[i]=v[i]+a[i-1];
        if(v[i]<a[i-1]){
            flag = false;
            cout<<(i+1)<<endl;
            break;
        }
    }
    if(flag)
        cout<<-1<<endl;
    return 0;
}

3.看花

卡在大数超时上,只对了55%

暂时没想到怎么改进

#include <iostream>
#include <vector>
#include <set>
using namespace std;
typedef long long ll;
int main(){
    ll n,m;
    cin>>n>>m;
    ll temp;
    vector<ll> a;
    for(ll i=0;i<n;i++){
        cin>>temp;
        a.push_back(temp);
    }
    ll Q;
    cin>>Q;
    ll l,r;
    for(ll i=0;i<Q;i++){
        cin>>l>>r;
        l--;r--;
        set<ll> s;
        for(ll j=l;j<=r;j++){
            s.insert(a[j]);
        }
        cout<<s.size()<<endl;
    }
     
    return 0;
}

满打满算只AC了三分之一的题,前19%,可能再AC一题能进面试吧

后面两道DP……蛋疼

发布了377 篇原创文章 · 获赞 344 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/105007080