2019年吉林省大学生程序设计竞赛题解【部分】

A题

题意:给出四个数 a,b,c,k.执行k次,每次分为三步(按顺序执行)

  1. If a > b then a= a − b.
  2. If b > c then b = b− c.
  3. If c > a then c = c − a.
    求k次后a,b,c分别为多少.

思路:找规律题,每次输出时如果a=b=c break即可,也就是说循环次数经过有限次(次数较少)一定得到a=b=c,k小于这个次数让它循环就行;

AC code

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<queue>
#include<stack>
using namespace std;
int main()
{
    int t,a,b,c,k;
    cin>>t;
    while(t--)
    {
        cin>>a>>b>>c>>k;
           while(k--)
           {
               if(a>b)a-=b;
               if(b>c)b-=c;
               if(c>a)c-=a;
               if(a==b&&b==c)break;
           }
 
        printf("%d %d %d\n",a,b,c);
    }
}

E题

题意:给出一个数n,问组成n个正方形框需要多少根火柴.

思路:n中一定包含一个1x1或2x2或3x3…的最大正方形块,我们可以先算出来包含的最大正方形块需要多少根火柴,然后算出还需要几个1x1的小正方形
把小正方形往大的正方形框上搭建即可,搭建时注意两条边每条边开始时的第一个小正方形需要3根火柴,其余的需要两根.
在这里插入图片描述

AC code

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<queue>
#include<stack>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
 long long int t,n;
 cin>>t;
 while(t--)
 {
     cin>>n;
     long long int s=0;
    long long int q=sqrt(n);//包含的最大正方形框的边长
        s+=3*2*(q-1)+4;//正方形框的两条外排小正方形需要的火柴数
        s+=(q*q-2*q+1)*2;//正方形框中剩下的小正方形需要的火柴数
    n-=q*q;//还需要搭建几个小正方形
    if(n>0)//搭建
    {
    if(n<=q)
    {
       s+=3;
       s+=(n-1)*2;
    }
      else
      {
          s+=6;
          s+=(n-2)*2;
      }
 
    }
    printf("%lld\n",s);
}
 
}

F题

题意:给出一个n,再给出一个nxn的矩阵代表每两个点间的最短距离,重建这个图但保证两点间的最短距离不变,问:最少需要多少条边

思路:【弗洛伊德+标记 】 每两个点间的最短距离有了,重建图时就是把重复的重复的边删去即可,枚举中间点如果距离相等就删去一条边.可能会有疑问中间如果有多个点怎么办,这个是不影响的因为我们每两个点的最短距离都有,如下图删去一条边后两点间的最短距离不变
在这里插入图片描述

AC code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
const double pi = acos(-1.0);
#define memset(a,b) memset(a,b,sizeof(a))
const int mod = (1 ? 1000000007 : 998244353);
const int inf = (1 ? 0x3f3f3f3f : 0x7fffffff);
const int dx[] = { -1,0,1,0 }, dy[] = { 0,1,0,-1 };
const ll INF = (1 ? 0x3f3f3f3f3f3f3f3f : 0x7fffffffffffffff);
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll poww(ll a, ll b, ll mod) { ll s = 1; while (b) { if (b & 1)s = (s * a) % mod; a = (a * a) % mod; b >>= 1; }return s % mod; }
 
 
const int N = 1e5 + 11;
ll n,m;
int z[305][305];
int vis[305][305];//标记数组
void solve()
{
    memset(vis,0);
    cin>>n;
    long long int  o=n*(n-1)/2;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)cin>>z[i][j];
    }
    for(int k=1;k<=n;k++)//弗洛伊德
for(int i=1;i<=n;i++)
   for(int j=1;j<=n;j++)
        if((z[i][j]==z[i][k]+z[k][j])&&vis[i][j]==0)//距离相等标记,n--
             {
                 if(i==k||j==k||i==j)continue;
                 //printf("%d %d",i,j);
                 o--;
                 vis[i][j]=1;
                 vis[j][i]=1;
             }
   // m=0;
 // for(int i=1;i<=n;i++)
 // {for(int j=1;j<=n;j++)cout<<vis[i][j]<<' ';cout<<endl;}
 
    cout<<o<<endl;
}
 
int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
    ll T = 1;
    //cin >> T;
    while (T--)solve();
    //while (cin >> n)solve();//HDU
    return 0;
 
}
 
 

G题

题意:t组数据,每组数据x1,y1,x2,y2,x3,y3;判断从点(x1,y1)发出经过(x2,y2)的射线是否经过(x3,y3).

思路:分情况讨论,
1 k不存在.
2 k=0.
3 k存在且不为零
判断(x3,y3)是否在射线上即(x1,y1)与(x2,y2)的斜率和(x1,y1)与(x3,y3)的斜率相等且(x2,y2)和(x3,y3)在(x1,y1)的一边,如图枚举所有情况即可

枚举所有情况即可

AC code

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<stack>
#include<queue>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    int a,b,c,d,e,f,t;
    cin>>t;
    while(t--)
    {
        cin>>a>>b>>c>>d>>e>>f;
        if(e==a&&f==b)printf("YES\n");
            else
            {
                if(a==c)//k不存在
                {
                    int flag=0;
                    if(((d>b)&&(f>b))||((d<b)&&(f<b)))flag=1;//判断(x2,y2)和(x3,y3)是否在同一边
                    if(e==a&&flag)printf("YES\n");//
                        else printf("NO\n");
                }
                   else if(b==d)//k==0
                   {
                      int flag=0;
                      if(((c>a)&&(e>a))||((c<a)&&(e<a)))flag=1;//判断(x2,y2)和(x3,y3)是否在同一边
                       if(b==f&&flag)printf("YES\n");
                          else printf("NO\n");
                   }
                else
                {
                   if(a==e)printf("NO\n");//k不存在
                     else{
if(((c>a)&&(e>a)&&(d>b)&&(f>b))||((c<a)&&(e<a)&&(d<b)&&(f<b))||((c>a)&&(e>a)&&(d<b)&&(f<b))||((c<a)&&(e<a)&&(d>b)&&(f>b)))//判断(x2,y2)和(x3,y3)是否在同一边,四种情况
{


                        double k1=(d-b)*1.0/(c-a),k2=(f-b)*1.0/(e-a);
                          if(k1==k2)printf("YES\n");
                                 else printf("NO\n");
}
  else printf("NO\n");
                     }
                }
            }
    }
}

I题

签到题,替换字符串

AC code

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<queue>
#include<stack>
using namespace std;
int main()
{
  char a[120000];
  memset(a,0,sizeof(a));
  cin>>a;
  int k=strlen(a);
  for(int i=0;i<k-1;i++)
    if((a[i]=='i'&&a[i+1]=='g')||(a[i]=='I'&&a[i+1]=='G')||(a[i]=='I'&&a[i+1]=='g'))
  {
      a[i]='i',a[i+1]='G';
  }
  printf("%s\n",a);
}

J题

题意:给出一个n 计算不超过cos(((n-1)!+1)/(n)*π)的平方的最大整数

找规律题,只要是素数就能得到π的整数倍即cos(kπ)的平方一定为1,输出不超过一的最大整数,输出1,其他的除了一之外都不能得到π的整数倍,最大值小于1,只能输出零.

AC code

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<queue>
#include<stack>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
 long long int t,n;
 cin>>t;
 while(t--)
 {
     cin>>n;
     if(n==1||n==2||n==3)printf("1\n");
       else{
     int flag=1,q=sqrt(n);
     for(int i=2;i<=q;i++)
       if(n%i==0)
       {
           flag=0;
           break;
       }
       if(flag)printf("1\n");
          else printf("0\n");
}
}
 
 
}
智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值