腾讯2017暑期实习生编程题-有趣的数字

来源:互联网 发布:干支纪年法简便算法 编辑:程序博客网 时间:2024/05/17 04:25

传送门

code

#include<vector>#include<cstdio>#include<algorithm>#include<map>using namespace std;map<int, int> mp;struct node{    int fi, se;    node(int f, int s){        fi = f;        se = s;    }    bool operator == (node rhs){        return fi == rhs.fi && se == rhs.se;    }};bool exist(vector<node> t, node tmp){    for(int i = 0; i < t.size(); ++i)        if(t[i] == tmp) return true;    return false;}vector<int> store;vector<node> test;int a[100005], n;int main(){    while(~scanf("%d", &n)){        mp.clear();        store.clear();        test.clear();        for(int i = 1; i <= n; ++i) {            scanf("%d", &a[i]);            ++mp[a[i]];        }        int maxAns, minAns = 0;        sort(a + 1, a + n + 1);         for(int i = 1; i <= n; ++i) {            store.push_back(a[i]);        }        maxAns = mp[a[1]] * mp[a[n]];        int Min = 0x7f7f7f7f;        for(int i = 1; i < store.size(); ++i){            if(store[i] - store[i - 1] < Min){                Min = store[i] - store[i - 1];                test.clear();                test.push_back(node(store[i], store[i - 1]));            }else if(store[i] - store[i - 1] == Min && !exist(test, node(store[i], store[i - 1]))){               /** test.clear();*/                test.push_back(node(store[i], store[i - 1]));            }        }        for(int i = 0; i < test.size(); ++i){                if(test[i].fi == test[i].se) minAns += (mp[test[i].fi] - 1) * mp[test[i].fi] / 2;                else minAns += mp[test[i].fi] * mp[test[i].se];        }        printf("%d %d\n", minAns, maxAns);    }    return 0;}添加笔记
0 0