拼多多超越计划笔试-2个AC 一个98% 第四题不会

有没有大佬会第四题啊  是不是动态规划
//94%-飞行棋
int main()
{   
    int N,K;
    while(cin>>N)
    {
        cin>>K;
        vector<int>v(K,0);
        for(int i=0;i<K;i++)
        cin>>v[i];
        int sum=0;
        int huitui=0;
        bool flag=false;
        for(int i=0;i<K;i++)
        {
            sum=sum+v[i];
            if(sum==N)
            {
                flag=true;
                break;
            }
            else if(sum>N)
            {
                sum=N-(sum-N);
                huitui++;
            }
            else {}
        }
        if(flag==true)
            cout<<"paradox"<<endl;
        else 
            cout<<N-sum<<" "<<huitui<<endl;
    }
}


//2 100%
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <unordered_map>
#include <vector>
#define fir first
#define se second
#define ll long long
#define pb push_back
#define mp make_pair
#define ull unsigned long long
#define cl(a, b) memset(a, b, sizeof(a))
#define quickio(a) ios::sync_with_stdio(a)
#define datatest() freopen("data.in", "r", stdin)
#define makeans() freopen("data.out", "w", stdout)
#define makedata() freopen("data.in", "w", stdout)
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<double, double>
using namespace std;
const int maxn = 1e6 + 10;
const int maxm = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const ll mod = 1e9 + 7;
const int maxblock = sqrt(maxn) + 10;
const double eps = 1e-7;
const ll INF = 1e16;
int a[maxn][7];
int n;
int root[maxn];
int num[maxn];
int dir[6][6] = {{0, 1, 2, 3, 4, 5}, {1, 5, 2, 3, 0, 4}, {2, 1, 5, 0, 4, 3},
                 {3, 1, 0, 5, 4, 2}, {4, 0, 2, 3, 5, 1}, {5, 4, 2, 3, 1, 0}};
int check(int posi, int posj) {
  int b[6];
  for (int i = 0; i < 6; i++) b[i] = 0;
  for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 6; j++) {
      b[j] = a[posj][dir[i][j]];
    }
    for (int j = 0; j < 4; j++) {
      int temp;
      temp = b[1];
      b[1] = b[2];
      b[2] = b[4];
      b[4] = b[3];
      b[3] = temp;
      int equal_flag = 1;
      for (int i = 0; i < 6; i++) {
        equal_flag &= (b[i] == a[posi][i]);
      }
      if (equal_flag) return 1;
    }
  }
  return 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < 6; j++) {
      scanf("%d", &a[i][j]);
    }
    std::swap(a[i][1], a[i][5]);
  }
  int group_num = 0;
  for (int i = 1; i <= n; i++) root[i] = 0;
  for (int i = 1; i <= n; i++) num[i] = 0;
  for (int i = 1; i <= n; i++) {
    int find_flag = 0;
    for (int j = i - 1; j >= 1; j--) {
      if (root[j] && check(i, j)) {
        num[j]++;
        find_flag = 1;
        break;
      }
    }
    if (!find_flag) {
      root[i] = 1;
      num[i] = 1;
      group_num++;
    }
  }
  printf("%d\n", group_num);
  int cnt = 0;
  vector<int> res;
  for (int i = 1; i <= n; i++) {
    if (root[i]) {
      res.push_back(num[i]);
    }
  }
  std::sort(res.begin(), res.end());
  std::reverse(res.begin(), res.end());
  for (int i = 0; i < res.size(); i++) {
    if (i)
      printf(" %d", res[i]);
    else
      printf("%d", res[i]);
  }
  printf("\n");
  return 0;
}
int main() {
  scanf("%d %d %d", &n, &m, &t);
  for (int i = 1; i <= n; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    v1.emplace_back(y, x);
  }
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    v2.emplace_back(y, x);
  }
  std::sort(v1.begin(), v1.end());
  std::sort(v2.begin(), v2.end());
  int Min = 2e6;
  int cur = m - 1;
  int now_min = 2e6;
  if (t == 0) {
    printf("0\n");
    return 0;
  }
  for (int i = 0; i < v1.size(); i++) {
    int y1 = v1[i].second;
    while (v1[i].first + v2[cur].first >= t && cur >= 0) {
      now_min = min(now_min, v2[cur].second);
      cur--;
    }
    Min = min(Min, y1 + now_min);
    if (v1[i].first >= t) {
      Min = min(Min, y1);
    }
  }
  cur = n - 1;
  now_min = 2e6;
  for (int i = 0; i < v2.size(); i++) {
    int y1 = v2[i].second;
    while (v2[i].first + v1[cur].first >= t && cur >= 0) {
      now_min = min(now_min, v1[cur].second);
      cur--;
    }
    Min = min(Min, y1 + now_min);
    if (v2[i].first >= t) {
      Min = min(Min, y1);
    }
  }
  if (Min == 2e6) Min = -1;
  printf("%d\n", Min);
  return 0;
}
/*
3
1 2 3 4 5 6
1 2 6 5 3 4
1 2 3 4 6 5

10
2 5 1 3 4 6
5 4 3 2 1 6
1 4 6 2 3 5
1 5 6 3 4 2
6 4 2 1 5 3
3 6 4 5 2 1
1 6 3 4 2 5
5 1 4 2 6 3
6 2 3 1 5 4
5 3 6 1 4 2
*/



#拼多多##笔试题目#
全部评论
3个ac,第4个0分。长时间没写代码手生了,前3题写的太慢了,第4题写动态规划没写出来(不知道是不是)
1 回复
分享
发布于 2020-08-02 21:12
同求第四题 感觉是状压dp 但是不太知道怎么转移 我自己想的转移方式复杂度爆炸
1 回复
分享
发布于 2020-08-02 21:13
联想
校招火热招聘中
官网直投
膜拜大佬,大佬骰子那题能不能说下思路
1 回复
分享
发布于 2020-08-02 21:19
大佬,这个图最后怎么截的
点赞 回复
分享
发布于 2020-08-04 09:44

相关推荐

头像
点赞 评论 收藏
转发
投递腾讯等公司9个岗位
点赞 评论 收藏
转发
5 23 评论
分享
牛客网
牛客企业服务