• 2018-2019赛季多校联合新生训练赛第八场(2018/12/22)补题题解


    感慨

    这次有点感冒,昏迷程度比较大中途还溜了

    感谢

    感谢qut的同学的帮助!!!

    A 小X与三角形(数学)

    公式

    两边的和-两边的差-1

    因为边最小得大于两边的差,边最大得小于两边的和所以说求得是一个开区间内元素的个数

    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      ll a,b;
      cin>>a>>b;
      cout<<(a+b)-abs(a-b)-1;
    }
    

    B 小X与机器人(数学)

    比赛昏迷题之一。。。今天早晨起来就瞬间会了

    直接枚举各个x看对应直线的方程算出来的y是不是一个整数点即可,然后特判一下相同相同y轴的情况即可

    #include <bits/stdc++.h>
    using namespace std;
    int bk[2332][2332];
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      double x1,y1,x2,y2;
      int ans=2;
      cin>>x1>>y1>>x2>>y2;
      double k=(y2-y1)/(x2-x1);
      double b=y1-k*x1;
      double xx=min(x1,x2);
      double yy=min(y1,y2);
      double tx=max(x1,x2);
      double ty=max(y1,y2);
      for(double i=xx+1;i<=tx-1;i++)
      {
        int t1=k*i+b;
        double t2=k*i+b;
        if(t1==t2&&!bk[int(i)][t1])
        ans++,bk[int(i)][t1]=1;
      }
      if(tx==xx)
      cout<<ty-yy+1;
      else if(ty==yy)
      cout<<tx-xx+1;
      else
      cout<<ans;
    }
    

    C 小X与机器人(数学)

    这个直接应用勾股定理。枚举每一个点与这三个点的距离,剩下两个点的距离和等于最后的答案的那个点的距离

    代码

    #include <bits/stdc++.h>
    using namespace std;
    double a[4];
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      double x1,y1,x2,y2,x3,y3;
      cin>>x1>>y1>>x2>>y2>>x3>>y3;
      for(double i=1;i<=19;i++)
      for(double j=1;j<=19;j++)
      {
        a[0]=pow((i-x1),2)+pow((j-y1),2);
        a[1]=pow((i-x2),2)+pow((j-y2),2);
        a[2]=pow((i-x3),2)+pow((j-y3),2);
        sort(a,a+3);
        if(a[0]==a[1]&&a[2]==a[0]+a[1])
        return cout<<i<<" "<<j,0;
      }
    }
    

    D 小X与缩写(字符串基础)

    考场上写的很丑也有些昏迷的题

    思路应该很多,我这个思路是挺复杂的

    代码

    #include <bits/stdc++.h>
    using namespace std;
    vector<string> vac;
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      string a;
      getline(cin,a);
      stringstream s;
      s<<a;
      string t,re="",ans="";
      int t1=0,t2=0;
      while(s>>t)
      {
        if(t[0]=='(')
        t1=1;
        if(t1)
        {
          for(int i=0;i<t.size();i++)
          if(isalpha(t[i]))
          {
            ans+=toupper(t[i]);
            break;
          }
        }
        else
        {
          vac.push_back(t);
          continue;
        }
        for(int i=0;i<t.size();i++)
        if(t[i]==')')
        {
          re+=ans,ans="",t1=0,t2=1;
        }
        else if(t[i]==','||t[i]=='.')
        re+=t[i];
        if(t2)
        {
          vac.push_back(re);
          re="";
          t2=0;
        }
      }
      for(int i=0;i<vac.size();i++)
      {
        cout<<vac[i];
        if(i!=vac.size()-1)
        cout<<" ";
      }
    }
    

    E 小X与游戏(贪心)

    如果上面的牌小于下面的牌那么就不选这一堆,否则选这一堆。然后把选出来的牌排序从大到小算总和然后求差

    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int num[666666];
    bool cmp(ll a,ll b)
    {
      return a>b;
    }
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      ll n,p=0,a1=0,a2=0;
      cin>>n;
      for(int i=0;i<n;i++)
      {
        int t1,t2;
        cin>>t1>>t2;
        if(t1>=t2)
        num[p++]=t1,num[p++]=t2;
      }
      sort(num,num+p,cmp);
      int f=1;
      for(int i=0;i<p;i++)
      {
        if(f)
        a1+=num[i];
        else if(!f)
        a2+=num[i];
        f=!f;
      }
      cout<<a1-a2;
    }
    

    F 小X与队列(思维)

    先开一个栈,把说到的编号放入栈中,然后输出栈,如果之前输出过了这个数那么不再进行输出。然后再枚举剩下的数,如果没有在栈中输出那么按照顺序输出即可

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int now[100005],num[100005],p,bk[100005];
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      int n,m;
      cin>>n>>m;
      for(int i=1;i<=n;i++)
      num[i]=i;
      while(m--)
      {
        int t;
        cin>>t;
        now[p++]=t;
      }
      for(int i=p-1;i>=0;i--)
      if(!bk[now[i]])
      cout<<now[i]<<" ",bk[now[i]]=1;
      for(int i=1;i<=n;i++)
      if(!bk[num[i]])
      cout<<num[i]<<" ";
    }
    

    G 小X与神牛(不明)

    待填坑

    H 扑克牌游戏(语法基础)

    不知道怎么错的都。。。我今天早晨起来又打了一遍,整理了一下思路,发现还不让交。。。

    代码略。。。今天早晨的代码没有交也没有存档了。。。

    思路就是找出来那些比他大的,然后注意如果点数相同算一个,然后输出点数最小的。还得注意a是最大的,具体可以把1改成14

    I 换位置游戏(不明)

    待填坑

    J 小球装箱游戏(结构体排序)

    对小球先进行一波排序,先按照大小降序排,如果大小相等那么按照颜色红色的排在前面

    然后因为n一定是偶数那么按照前n/2是A箱后n/2是B箱进行挨个计算即可

    代码(当时昏迷排序规则都写反了)

    #include <bits/stdc++.h>
    using namespace std;
    struct node
    {
      int id,sum;
    }num[666666];
    bool cmp(node a,node b)
    {
      return a.sum==b.sum?a.id>b.id:a.sum<b.sum;
    }
    int main()
    {
      ios::sync_with_stdio(0);
      cin.tie(0);
      cout.tie(0);
      int n,r11=0,r12=0,r21=0,r22=0;
      cin>>n;
      for(int i=0;i<n;i++)
      cin>>num[i].sum>>num[i].id;
      sort(num,num+n,cmp);
      for(int i=0;i<n/2;i++)
      if(num[i].id==0)
      r11++;
      else if(num[i].id==1)
      r12++;
      for(int i=n/2;i<n;i++)
      if(num[i].id==0)
      r21++;
      else if(num[i].id==1)
      r22++;
      cout<<r21<<" "<<r22<<"
    "<<r11<<" "<<r12;
    }
    

    K 连续质数和(不明)

    待填坑

  • 相关阅读:
    JDBC
    Android--RelativeLayout
    Android--开发过程中使用到的长度单位
    java--进步学习IO
    java--从控制台读入一些数据
    java--IO
    C语言数据结构-创建链表的四种方法
    标准I/O库函数的缺陷
    Java四种引用包括强引用,软引用,弱引用,虚引用
    算法导论答案(1-11)
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/10166332.html
Copyright © 2020-2023  润新知