首页 > 途家 秋招 开发工程师 笔试 编程题 AC代码
头像
b0lv42
编辑于 2019-09-06 23:31
+ 关注

途家 秋招 开发工程师 笔试 编程题 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;
}



全部评论

(8) 回帖
加载中...
话题 回帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐