途家 秋招 开发工程师 笔试 编程题 AC代码

两道数据都水,纯水过去的
因为数据太水了所以代码根本没有参考性!我的写法是有问题的!只是提供一个思路可以大家讨论一下

第一题:
纯贪心,t-i>4这个地方,写5是67%,写6及以上和3及以下是33%,写4就A了,无赖骗分
#include<cstdio>
using namespace std;

int main()
{
      int m,s,t;
      int dis,time;

      scanf("%d%d%d",&m,&s,&t);

      dis=0;
      for (int i=1;i<=t;i++)
      {
            if (m>=10)
            {
                  dis+=50;
                  m-=10;
            }
            else if (t-i>4)
            {
                  m+=4;
            }
            else
            {
                  dis+=13;
            }
            if (dis>=s)
            {
                  printf("YES\n");
                  printf("%d\n",i);
                  break;
            }
      }

      if (dis<s)
      {
            printf("NO\n");
            printf("%d\n",dis);
      }

    return 0;
}
第二题:
正解不会,试着只对这R个特定点建图,求一波最小生成树,A了
最小生成树明显是错的,问了巨佬说这个题有问题,除了旅行商都有反例,可能是个错题
有空可以写下旅行商解法
#include<cstdio>
#include<algorithm>
using namespace std;

int f[10100];

struct numm
{
    int x,y;
    int v;
}qwq[10100];

bool cmp(numm a,numm b)
{
    return (a.v<b.v);
}

int find(int x)
{
    while (x!=f[x]) x=f[x];
    return x;
}

int main()
{
      int fx,fy,qxq;
      int dis,ans;
      int R[110];
      int len;
      int a,b,c;
      int n,m,r;

      scanf("%d%d%d",&n,&m,&r);
      for (int i=1;i<=r;i++) scanf("%d",&R[i]);
      sort(R+1, R+1+r);

      len=0;
      for (int i=1;i<=m;i++)
      {
            scanf("%d%d%d",&a,&b,&c);
            bool isx,isy;
            isx=isy=false;
            for (int k=1;k<=r;k++)
            {
                  if (R[k]==a) isx=true;
                  if (R[k]==b) isy=true;
                  if (isx==true && isy==true) break;
            }
            if (isx==false || isy==false) continue;
            //printf("addpair: %d %d ==%d\n",a,b,c);
            len++;
            qwq[len].x=a;
            qwq[len].y=b;
            qwq[len].v=c;
      }


      qxq=0;
      ans=0;
      for (int i=1;i<=n;i++) f[i]=i;

      sort(qwq+1,qwq+1+len,cmp);

      for (int i=1;i<=len;i++)
      {
            fx=find(qwq[i].x);
            fy=find(qwq[i].y);
            if (fx!=fy)
            {
                  f[fx]=fy;
                  qxq++;
                  //printf("addline=  %d\n",qwq[i]);
                  ans+=qwq[i].v;
                  if (qxq==r-1) break;
            }
      }

      printf("%d\n",ans);

    return 0;
}



#笔试题目##途家网##题解##笔经#
全部评论
想问下 第一题 t-i大于4是因为什么。。
点赞 回复 分享
发布于 2019-09-06 22:01
我测了好久的第一题一直67,我很怀疑他一共只有3个测试点(想不出我wa哪里了
点赞 回复 分享
发布于 2019-09-06 22:02
我第一题也是67😂,第二题75
点赞 回复 分享
发布于 2019-09-06 22:18
为啥要判断t-i>4呢?能量如果不够,直接+4不可以吗?直到下次够了
点赞 回复 分享
发布于 2019-09-06 22:20
最后4秒攒魔法跳一下不如跑4秒划算,但是如果还有一点魔法值,也可能用2秒或者3秒跳一次,然后就把自己绕晕了
点赞 回复 分享
发布于 2019-09-06 22:23
第一题我就33%,很尴尬...
点赞 回复 分享
发布于 2019-09-06 22:24
大佬
点赞 回复 分享
发布于 2019-09-06 22:42
有没有用JAVA写的第二个旅途问题
点赞 回复 分享
发布于 2019-09-06 23:30

相关推荐

不愿透露姓名的神秘牛友
10-24 19:32
投递恒生电子股份有限公司等公司10个岗位 > 你都收到了哪些公司的感谢信?
点赞 评论 收藏
分享
评论
1
13
分享
牛客网
牛客企业服务