网易互联网 算法通用(网申批)30 100 100 60

第一题 吃葡萄 30
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        long long a,b,c;
        cin >> a >> b >> c;
        long long avg = (a+b+c) / 3;
        long long sheng = (a+b+c) % 3;
        long long x=0,y=0,z=0;
        if(a+b < avg) x = avg-a-b;
        if(b+c < avg) y = avg-b-c;
        if(a+c < avg) z = avg-a-c;
        cout << avg+sheng/2+sheng%2<< endl;
    }
    return 0;
}
第二题 堆积木 100
def isojbk(nums,m):
    m += nums[0]
    nums[0] = 0
    for i in range(1,len(nums)):
        if nums[i] >= i:
            m += nums[i] - i
            nums[i] = i
            continue
        if nums[i] < i and i - nums[i] > m:
            return False
        else:
            m -= (i-nums[i])
            nums[i] = i
            continue
    return True
t = int(input())
t2 = t
nm = []
nums = []
while t>0:
    nm.append(list(map(int,input().split())))
    nums.append(list(map(int,input().split())))
    t -=1
for i in range(t2):
    print('YES' if isojbk(nums[i],nm[i][1]) else 'NO')
第三题 跳柱子 100
#include<vector>
#include<iostream>
using namespace std;

string isok(int n, int k, vector<int> h)
{
 vector<vector<int>> dp(n, vector<int>(2, 0));
 dp[0][0] = 1;
 for (int i = 1; i < n; i++)
 {
  for (int j = i - 1; j >= 0 && j >= i - k; j--)
  {
   if (dp[j][0] && h[j] >= h[i]) //j没用  i也没用
   {
    dp[i][0] = 1;
   }
   if (dp[j][1] && h[j] >= h[i])//j用了 i没用
   {
    dp[i][1] = 1;
   }
   if (dp[j][0]) //j没用 i用
   {
    dp[i][1] = 1;
   }
  }
 }
 if (dp[n - 1][0] || dp[n - 1][1])
  return "YES";
 return "NO";
}

int main()
{
 int T;
 cin >> T;
 vector<string> ans;
 for (int i = 0; i < T; i++)
 {
  int n, k;
  cin >> n >> k;
  vector<int> h(n, 0);
  for (int i = 0; i < n; i++)
  {
   cin >> h[i];
  }
  ans.push_back(isok(n, k, h));
 }
 for (int i = 0; i < T; i++)
 {
  cout << ans[i] << endl;
 }
}
第四题 逆序对距离 60
def insertion_sort(nums):
    d = [i for i in range(len(nums))]
    cout = 0
    for insertion_index in range(1, len(nums)):
        while insertion_index > 0 and nums[insertion_index] < nums[insertion_index -1]:
            cout += abs(d[insertion_index]-d[insertion_index - 1])
            d[insertion_index - 1], d[insertion_index] = d[insertion_index], d[insertion_index - 1]
            nums[insertion_index - 1], nums[insertion_index] = nums[insertion_index], nums[insertion_index - 1]
            insertion_index -= 1
    return cout
n = int(input())
nums = list(map(int,input().split()))
print(insertion_sort(nums))



#网易##算法工程师##题解#
全部评论

相关推荐

只写bug的程序媛:人家说一本以上,不是及以上
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务