1. 程式人生 > >騰訊2017暑期實習生程式設計題-有趣的數字

騰訊2017暑期實習生程式設計題-有趣的數字

傳送門

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; } 新增筆記