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<<"\n"<<r11<<" "<<r12;
}

K 连续质数和(不明)

待填坑

原文地址:https://www.cnblogs.com/baccano-acmer/p/10166332.html

时间: 2024-10-10 11:46:47

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

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

A 价钱统计(基础编程能力) 这个考点还是比较个性的,怎么四舍五入 解法 常规的讲如果四舍五入整数位的话,那么只需要在后面加个0.5然后强制转换一下就可以了 这个却要我们保留一位小数的四舍五入,那该怎么做呢 实际上我们只需要把这个数乘以10然后加0.5,强制转换后再除以10就可以了 代码 #include <bits/stdc++.h> using namespace std; double trans(double a) { a*=10; a+=0.5; a=int(a); a/=10; r

Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)

D 10248 修建高楼 D 传送门 题干 题目描述 C 市有一条东西走向的"市河".C 市的市长打算在"市河"的其中一条岸边自东往西的 n 个位置(可以将这 n 个位置看成在一条直线上,且位置不会重叠)依次建造高楼. C 市的设计部门设计了 T 个方案供市长挑选(方案编号为 1 到 T).每个方案都提供了建造的每幢高楼的高度,自东向西依次为 h1,h2,h3,-,hn-1,hn.每幢楼房的高度在 1 到 n 之间(包括 1 和 n),且各不相同. 市长在挑选设计方

迎接2019多校联合新生训练赛(2018/12/31)

A 新年礼物(数学) 这个题之前cf div2刚刚考过应该都会吧.就是把左边界×2遍历一下就可以了 代码 #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 l,r,sum=0; cin>>l>>r; for(ll i=l;i<=r;) i*=2,su

郑州大学2018新生训练赛第十场题解

比赛(补题)地址:http://222.22.65.164/problemset.php 题号为:4305 -- 4309 总述:这次新生赛难度偏于平和,但涵盖方面甚广,其中一道签到题是c语言题,并且有两道是hdu一百题的原题,一道简单的最小生成树,唯一"有些难度"的应该是一道数论题(毕竟本来自己就是搞数学的).   A.沙漠骆驼 这是一道经典的递推问题,原型为HDU 2044的"一只小蜜蜂-".思路很简单,以第5个沙丘为例,到达第五个沙丘的方式有两种:从第3个向

HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&#39;s problem(manacher+二分/枚举)

HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分相同,第一部分与第二部分对称. 现在给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度. 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法,求出以第i个点为中心的回文串长度,记录到数组p中 要满足题目所要求的内容,需要使得两个相邻的回文串,共享中间的一部分,也就是说,左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也是一样. 因为我们已经记录下来以

HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&amp;#39;s problem(manacher+二分/枚举)

pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度. 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法.求出以第i个点为中心的回文串长度.记录到数组p中 要满足题目所要求的内容.须要使得两个相邻的回文串,共享中间的一部分,也就是说.左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也

HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是把区间 (l,r) 中大于x的数跟 x 做gcd操作. 线段树区间更新的题目,每个节点保存一个最大和最小值,当该节点的最大值和最小值相等的时候表示这个区间所有的数字都是相同的,可以直接对这个区间进行1或2操作, 进行1操作时,当还没有到达要操作的区间但已经出现了节点的最大值跟最小值相等的情况时,说明

HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第一种是行交换操作,就是把矩阵的两行进行交换,另一种是列交换操作,注意两种操作都要求行或列至少要有一个水果,第三种操作是查找,询问第A行B列的水果的能量值,如果查询的位置没有水果,则输出0. 因为n和m都很大,达到了2*10^9,但水果最多一共只有10^5个,我的做法是直接用结构体存了之后排序,然后m

UPC2018组队训练赛第七场

题目来自ICPC 2017 Japan Tsukuba A题:Secret of Chocolate Poles 有三种巧克力,分别是厚度为1的白色巧克力,厚度为1或者k的黑色巧克力.要求把巧克力放到高度为 l 的盒子里,并且要黑白相间,底部和顶部必须都是黑色的 当l=1,ans=1:当l<k,ans=(l-1)/2+1:当l=k,ans=(l-1)/2+2;当l>k时,就可以转化成排列组合问题了,枚举厚度为k的黑色巧克力数目i,然后对于每一种情况,再枚举厚度为1的黑色巧克力的数目j,那么此时