首页 > 代码库 > 头条校招 编程第一题

头条校招 编程第一题

头条的2017校招开始了!为了这次校招,略去!

简单的思路就是排序,然后数就行了。刚开始写的很简单,没考虑这样的情况比如(10,30,50),10和30之间可以插入20满足条件,然后这个例子的结果应该是3.我当时没有做出来!后来跟师姐简单讨论下,说是简单排序后,每3个3个检查一下不就可以了么,我恍然大悟,原来可以这样,我还以为很复杂呢!结束后我写了一下,不知道结果对不对。

 1 #include<bits/stdc++.h> 2 #define pb push_back 3 #define FOR(i, n) for (int i = 0; i < (int)n; ++i) 4 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl 5 typedef long long ll; 6 using namespace std; 7 typedef pair<int, int> pii; 8 const int maxn = 1e3 + 10; 9 void solve() {10     int n;11     cin >> n;12     if(n == 0) {13         cout << 0 << endl;return;14     }15     if(n == 1) {16         cout << 2 << endl; return;17     }18     vector<int> a(n);19     for (int i = 0; i < n; i++) cin >> a[i];20     sort(a.begin(), a.end());21     int cnt = 0;22     int res = 0;23     for (int i = 0; i < n; i++) {24             //cout << i <<endl;25         if(i + 2 < n) {26             if(a[i + 2] - a[i] <= 20) {i += 2;}27             else if(a[i + 1] - a[i] <= 20) {28                 res += 1;29                 i += 1;30             } else {31                 res += 2;32             }33         } else {34             if(i + 1 < n) {35                 if(a[i + 1] - a[i] <= 20) {res++;}36                 else res += 4;37                 i++;38             } else {39                 res += 2;40             }41         }42     }43     cout << res << endl;44 45 }46 int main() {47     // freopen("data", "r", stdin);48     //freopen("test.out", "w", stdout);49     //int _ = 20;50     //while(_--)51     solve();52     return 0;53 }

 

头条校招 编程第一题