拼多多超越计划笔试-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
*/



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

相关推荐

不愿透露姓名的神秘牛友
07-11 12:31
以前小时候我最痛恨出轨、偷情的人,无论男女,为什么会出轨?现在我成了自己最讨厌的人,没想到分享的东西在牛客会被这么多人看,大家的评价都很中肯,我也认同,想过一一回复,但我还是收声了,我想我应该说说这件事,这件事一直压在我心里,是个很大的心结,上面说了人为什么出轨,我大概能明白了。我们大一下半年开始恋爱,开始恋爱,我给出了我铭记3年的承诺,我对她好一辈子,我永远不会背叛,我责任心太重,我觉得跟了我,我就要照顾她一辈子,我们在一起3年我都没有碰过她,她说往东我就往东,她说什么我做什么,她要我干什么,我就干什么!在学校很美好,中途也出过一些小插曲,比如男闺蜜、男闺蜜2号等等等。但我都强迫她改掉了,我...
牛客刘北:两个缺爱的人是没有办法好好在一起的,但世界上哪有什么是非对错?你后悔你们在一起了,但是刚刚在一起的美好也是真的呀,因为其他人的出现,你开始想要了最开始的自己,你的确对不起自己,21岁的你望高物远,你完全可以不谈恋爱,去过你想要的生活,你向往自由,在一起之后,你要想的不是一个人,而是两个人,你不是变心了,就像你说的,你受够了,你不想包容了,冷静几天是你最优的选择,爱人先爱己。
社会教会你的第一课
点赞 评论 收藏
分享
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
5
23
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务