【网易笔试】100 100 100 0

第一题吃葡萄,考虑最小的两个和的2倍是否大于第三个,分两种情况就可以了。

第二题积木,第i堆时,当前积木大于等于0-i-1的和就行

第三题,从后向前记录能直达n的点为-1 然后,从前到后,遇到在k范围内的点有-1就是true。这个应该有更好的方法是按超能力次数dp,笔试的时候没想太多

第四题,逆序对变种,应该归并思想也能做吧可惜时间不够了。

总体不算难,题量有点大,前面有的笔误浪费太久了

晚上放代码



#网易##算法工程师##笔试题目#
全部评论
先实现`a <= b <= c` 然后 if ((a+b)*2 >= c)   cout << ((a+b+c)/3 + (a+b+c)%3) << '\n'; else {   cout << (c/2 + c%2) << '\n'; }
点赞 回复 分享
发布于 2019-09-21 17:30
第三题: int main() {     int T;     cin >> T;     while (T--) {         int n, k;         cin >> n >> k;         vector<int> a(n);         for (int i = 0; i < n; i++)             cin >> a[i];         vector<int> dp(n, 0);         dp[n - 1] = -1;         for (int i = n - 2; i >= 0; i--) {             for (int j = min(n - 1, i + k); j > i; j--) {                 if (a[j] <= a[i] && dp[j] == -1) {                     dp[i] = -1;                     break;                 }             }         }         if (dp[0] == -1) {             cout << "YES" << endl;             continue;         }         for (int i = 0; i < n; i++)             cout << dp[i] << ' ';         cout << endl;         bool res = false;         dp[0] = 1;         for (int i = 1; i < n; i++) {             for (int j = max(0, i - k); j < i; j++) {                 if (dp[j] == 1) {                     if (dp[i] == -1) {                         res = true;                         break;                     }                     else if (a[j] >= a[i])                         dp[i] = 1;                 }             }             if (res == true)                 break;         }         if (res)             cout << "YES" << endl;         else             cout << "NO" << endl;     }     system("pause");     return 0; }
点赞 回复 分享
发布于 2019-09-21 18:08
第二题一样思路,我一直10%。。。脑阔疼😪 100 10 100 90
点赞 回复 分享
发布于 2019-09-21 17:16
吃葡萄 求个代码叻
点赞 回复 分享
发布于 2019-09-21 17:20
求吃葡萄代码
点赞 回复 分享
发布于 2019-09-21 17:28
我…我以为只能从每一堆中拿一块积木,原来可以重复拿的!?
点赞 回复 分享
发布于 2019-09-21 17:31
最后一题通过了10%,最后改成long long没提交成功。
点赞 回复 分享
发布于 2019-09-21 17:35
你们做了问答题吗?那个怎么判分啊?
点赞 回复 分享
发布于 2019-09-21 17:39
第一题: int main() {     int T;     cin >> T;     while (T--) {         vector<int> a(3);         cin >> a[0] >> a[1] >> a[2];         sort(a.begin(), a.end());         if ((a[0] + a[1]) >= a[2] / 2) {             long long sum = a[0] + a[1] + a[2];             if (sum % 3 == 0)                 cout << sum / 3 << endl;             else                 cout << sum / 3 + 1 << endl;         }         else {             if (a[2] % 2 == 0)                 cout << a[2] / 2 << endl;             else                 cout << a[2] / 2 + 1 << endl;         }     }     system("pause");     return 0; }
点赞 回复 分享
发布于 2019-09-21 18:06
第二题: int main() {     int T;     cin >> T;     while (T--) {         int n, m;         cin >> n >> m;         long long sum = m;         int temp;         int i = 0;         long long tar = n * (n - 1) / 2;         bool flag = true;         for (; i < n; i++) {             cin >> temp;             sum = sum + temp - i;             if (sum < 0) {                 flag = false;             }         }         if (flag)             cout << "YES" << endl;         else             cout << "NO" << endl;     }     return 0; }
点赞 回复 分享
发布于 2019-09-21 18:08

相关推荐

2024-12-27 10:21
已编辑
海南师范大学 媒介策划
到我怀里来:身高体重住址这些就别写了,留几个关键的就行,工作经历突出重点写详细点
点赞 评论 收藏
分享
评论
3
6
分享

创作者周榜

更多
牛客网
牛客企业服务