2021.12.10--《21-22-1蓝桥训练8》

2021.12.10–《21-22-1蓝桥训练8》

前话
这篇题解感觉就是提供一下代码,题目难度应该还没有达到省赛难度
之后的蓝桥题解有时间的话还是会再写的

题目
1、试题 算法训练 素因子去重
在这里插入图片描述思路:质因数分解

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,p=1;
int main(){
    cin>>n;
    for(ll i=2;i*i<=n;i++){
        if(n%i==0){
            p*=i;
            while(n%i==0) n/=i;
        }
    }
    if(n>1) p*=n;
    cout<<p<<"\n";
}

2、试题 算法训练 小生物的逃逸
在这里插入图片描述思路:
就是问每个点在多少个球内,直接拿每个点去跟所有球的球心计算距离,距离小于该球的半径,就说明在这个球内,答案加1。

#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,m,ans[N];
struct Circle{
    double x,y,z,r;
}cir[N];

double get_dist(double x,double y,double z,double nx,double ny,double nz){
    double dx=x-nx;
    double dy=y-ny;
    double dz=z-nz;
    return sqrt(dx*dx+dy*dy+dz*dz);
}

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        double x,y,z,r;scanf("%lf%lf%lf%lf",&x,&y,&z,&r);
        cir[i]={x,y,z,r};
    }
    for(int i=1;i<=m;i++){
        double x,y,z;scanf("%lf%lf%lf",&x,&y,&z);
        int num=0;
        for(int j=1;j<=n;j++){
            double nx=cir[j].x,ny=cir[j].y,nz=cir[j].z,nr=cir[j].r;
            if(get_dist(x,y,z,nx,ny,nz)<nr) num++;
        }
        ans[i]=num;
    }
    for(int i=1;i<=m;i++) printf("%d%c",ans[i],i==m?'\n':' ');
    return 0;
}

3、试题 算法训练 找零钱
在这里插入图片描述思路:
碰到25,25数量+1
碰到50,25数量-1,50数量+1
碰到100,有50就用一张50和一张25,否则用三张25
最后判断25和50数量是否为非负数就行了。

#include<bits/stdc++.h>
using namespace std;
int n,nu25,nu50,nu100;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int now;scanf("%d",&now);
        if(now==25) nu25++;
        else if(now==50){
            nu25--;
            nu50++;
        }
        else{
            if(nu50>0){
                nu25--;
                nu50--;
            }
            else{
                nu25-=3;
            }
        }
    }
    if(nu25>=0&&nu50>=0) puts("YES");
    else puts("NO");
    return 0;
}

4、试题 算法提高 研究兔子的土豪
在这里插入图片描述思路:矩阵快速幂模板题(自学)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1007;
ll n;
struct mat{
    ll a[3][3];
};
mat ans;

mat mulit(mat a,mat b,ll mod){
    mat c;
    memset(c.a,0,sizeof(c.a));
    for(ll i=0;i<2;i++){
        for(ll j=0;j<2;j++){
            for(ll k=0;k<2;k++){
                c.a[i][j]+=a.a[i][k]*b.a[k][j];
                c.a[i][j]%=mod;
            }
        }
    }
    return c;
}

mat pow(mat a,ll k,ll mod){
    mat res;
    memset(res.a,0,sizeof(res.a));
    res.a[0][0]=res.a[1][1]=1;
    while(k){
        if(k&1) res=mulit(res,a,mod);
        a=mulit(a,a,mod);
        k>>=1;
    }
    return res;
}

int main(){
    scanf("%lld",&n);
    if(n==1||n==2) {puts("1");return 0;}
    mat c;
    c.a[0][0]=1,c.a[0][1]=1;
    c.a[1][0]=1,c.a[1][1]=0;
    ans=pow(c,n-2,mod);
    ll x=(ans.a[0][0]+ans.a[1][0])%mod;
    printf("%lld\n",x);
    return 0;
}

5、试题 历届试题 子串分值和【第十一届】【省赛】【B组】
在这里插入图片描述思路:(之前好像考过)
计算每个字符对答案的贡献就行了。
对于第i个位置的字符k,其可以分成两部分,
一部分是到上一个字符k所在位置截止 ( i − p r e [ k ] ) (i-pre[k]) (ipre[k])
一部分是一直到字符串的末尾 ( l e n − i + 1 ) (len-i+1) (leni+1)
则第i个位置的贡献为 ( i − p r e [ k ] ) ∗ ( l e n − i + 1 ) (i-pre[k])*(len-i+1) (ipre[k])(leni+1),累加一下就是总贡献了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+5;
ll sum,pre[N];
char s[N];

int main(){
    scanf("%s",s+1);
    ll len=strlen(s+1);
    for(ll i=1;i<=len;i++){
        ll idx=s[i]-'a';
        sum+=(i-pre[idx])*(len-i+1);
        pre[idx]=i;
    }
    printf("%lld\n",sum);
}

6、试题 算法训练 活雷锋
在这里插入图片描述思路:
判断是否有16出现就行了

#include<bits/stdc++.h>
using namespace std;
bool flag;

int main(){
    for(int i=1;i<=4;i++){
        for(int j=1;j<=5;j++){
            int x;scanf("%d",&x);
            if(x==16) flag=true;
        }
    }
    if(flag) puts("yes");
    else puts("no");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝桥测试数据大小为60.06 MB。数据的大小通常是指数据占用的存储空间大小。在计算机中,数据以二进制的形式存储,每个二进制位(位)可以表示一个0或1,8个二进制位组成一个字节(Byte)。因此,60.06 MB表示数据占用了60.06兆字节的存储空间。 蓝桥测试数据大小为60.06 MB,换算成比特(Bits)为480.48兆比特(Mb)。MB(兆字节)和Mb(兆比特)之间的转换关系是:1兆字节(MB)= 8兆比特(Mb)。所以,60.06 MB乘以8得到480.48 Mb。 可以根据数据的大小来估计需要的存储空间和传输时间。传输时间取决于网络速度和文件大小。网络速度通常以比特每秒(bps)或兆比特每秒(Mbps)为单位。如果网络速度是1 Mbps,将60.06 MB转换成比特(Bits),并除以1 Mbps,可以得到传输该数据所需的时间。根据计算,以1 Mbps的传输速度传输60.06 MB的数据需要约480.48秒。 综上所述,蓝桥测试数据大小为60.06 MB,换算成比特为480.48 Mb。传输该数据所需的时间取决于网络速度,根据1 Mbps的传输速度估计,大约需要480.48秒。 ### 回答2: 蓝桥测试数据的大小为60.06MB。MB是存储容量的单位,表示兆字节。60.06MB大约相当于60060000字节。这个大小可以用来评估蓝桥测试数据的存储需求。根据文件类型和内容的不同,60.06MB可以容纳不同数量和大小的文件。例如,对于文本文件而言,这个大小可以容纳非常大的文本文件,大约相当于60000页的纸质文档。对于音频文件或视频文件而言,这个大小可能只能容纳数分钟的内容,具体取决于文件的编码和比特率。总的来说,60.06MB的大小在当前计算机及存储技术下不算特别大,但也不小。根据具体的使用场景和需要,我们可以相应地调整存储设备的容量,以便满足对蓝桥测试数据的存储和传输需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值