2021牛客暑期多校训练营1(补题)

简介: 2021牛客暑期多校训练营1(补题)

A Alice and Bob

解题思路

![在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool d[5005][5005];
void init(){
    for(int i=0;i<=5000;i++){
        for(int j=0;j<=5000;j++){
            if(!d[i][j]){
                for(int k=1;k+i<=5000;k++)
                for(int s=0;s*k+j<=5000;s++)
                d[i+k][j+s*k]=1;
                for(int k=1;k+j<=5000;k++)
                for(int s=0;s*k+i<=5000;s++)
                d[i+s*k][j+k]=1;
            }
        }
    }
}
int main(){
    init();
    int t;
    cin>>t;
    while(t--){
        int n,m;
        cin>>n>>m;
        if(d[n][m]) cout<<"Alice"<<endl;
        else cout<<"Bob"<<endl;
    }
    return 0;
}

B.Ball Dropping

题目大意:一个球卡在一个直角等腰梯形内部,求卡着的高度。

根据相似三角形,很容易能求出结果。

#include<bits/stdc++.h>
using namespace std;
double r, a, b, h;
int main()
{
    scanf("%lf%lf%lf%lf",&r,&a,&b,&h);
    if(a<b)
    {
        int c=a;
        a=b;
        b=c;
    }
    if(r*2.0<=b)cout<<"Drop"<<endl;
    else 
    {
        cout<<"Stuck"<<endl;
        double x=b*h/(a-b);
        double l=2*r/a*sqrt((a/2)*(a/2)+(h+x)*(h+x));
        double ll=l-x;
        printf("%.10lf\n",ll);
    }
}

D Determine the Photo Position

题目大意:给出一个 n* n 的 01 矩阵,要用一个 1* m 的矩阵去覆盖一段 0,问方案数。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[5001][5001];
int ans;
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
    {
        int num=0;
        for (int j=1;j<=n;j++)
        {
            scanf("%1d",&a[i][j]);
            if (a[i][j]==0) num++;
                else num=0;
            if (num>=m) ans++;
        }
    }
    printf("%d\n",ans);
    return 0;
}

F Find 3-friendly Integers

题目大意:定义一个自然数是 3-friendly 的,如果它存在一个子串(允许前导 00 )是 33 的倍数。多组数据,求 L - R 中的 3-friendly3−friendly 的数的个数。

思路

如果是三位数及以上,一定是 3-friendly3−friendly 的。求一下一百以内的数。

#include<bits/stdc++.h>
using namespace std;
long long t,l,r;
int a[101];
long long _if(long long x)
{
    if(x<=99)return a[x];
    return x-99+a[99];
}
int main()
{
    cin>>t;
    a[0]=1;
    for(int i=1;i<=9;i++)
    {
        a[i]=a[i-1];
        if(i%3==0)
        {
            a[i]++;
        }
    }
    for(int i=10;i<=99;i++)
    {
        a[i]=a[i-1];
        if(i%3==0||i/10%3==0||i%10%3==0)
        {
            a[i]++;
        }
    }
    while(t--)
    {
        cin>>l>>r;
        cout<<_if(r)-_if(l-1)<<endl;
    }
 }

G Game of Swapping Numbers

题目大意:给定序列 A,BA,B ,需要交换恰好 kk 次 AA 中两个不同的数,使得 A,BA,B 每个位置的绝对差值和最大。

思路:

A B两个差的绝对值,相当于赋予两个数符号,我们可以先选出,相应位置的大数和小数,然后排序贪心,比较他们的交换贡献值。

代码:

#include<bits/stdc++.h>
using namespace std;
int a[500010],b[500010];
long long ans;
int main()
{
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
       scanf("%d",&a[i]);
    if(n==2)
    {
        while(k--)
        {
            int c=a[1];
            a[1]=a[2];
            a[2]=c;
        }
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&b[i]);
        if(a[i]>b[i])
        {
            int c=a[i];
            a[i]=b[i];
            b[i]=c;
        }
        ans+=b[i]-a[i];
    }
    sort(a+1,a+1+n);
    sort(b+1,b+1+n);
    for(int i=1;i<=k;i++)
    {  
        if(i>n)break;
        int t;
        t=2*(a[n+1-i]-b[i]);
        if(t>0)
        ans+=t;
        else break;
    }
    cout<<ans<<endl;
}

I Increasing Subsequence

题目大意:给出排列P,两个人轮流取数,每次取的数需要在之前该人取数的右边,且比当前取出来的所有的数都要大。所有当前可选的数都将等概率随机的被当前决策人选中。问两个人期望去数的轮数。

代码:

#include<bits/stdc++.h>
using namespace std;
long long mod=998244353;
double eps=1e-7;
long long a[5010],inv[5010];
long long n;
long long qsm(long long a,long long n)
{
    long long res=1;
    while(n)
    {
        if(n&1)
        res=res*a%mod;
        a=a*a%mod;
        n/=2;
    }
    return res;
}
long long  f[5010][5010];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
    }
    for(int i=1;i<=n;i++)
    inv[i]=qsm(i,mod-2);
    for(int j=n;j>=0;j--)
    {
        long long cnt=0,sum=0;
        for(int i=n;i>=0;i--)
    {
            if(a[i]>j)
            {
                cnt++;
                sum+=f[j][a[i]];
                sum%=mod;
            }
            else if(a[i]<j)
            {
                f[a[i]][j]=1;
                if(!cnt)continue;
                f[a[i]][j]+=sum*inv[cnt]%mod;
                f[a[i]][j]%=mod;
            }
        }
    }
    long long res=0;
    for(int i=1;i<=n;i++)
        res=(res+f[0][i])%mod;
    res=res*inv[n]%mod;
    cout<<res<<endl;
    return 0;
}
目录
相关文章
|
算法 安全 程序员
阿里云秋招宣讲会师兄师姐面经干货续集《算法&研发专场》来啦
上周,《阿里云校招宣讲会:前端&设计专场》已顺利结束啦,小伙伴们通过内推投简历了没有呢?听了师兄师姐的校招经验干货分享之后是不是胸有成竹地在等待面试通知了呢?来来来,阿里妹陪你一起梳理师兄师姐们分享的干货要点~
2690 0
阿里云秋招宣讲会师兄师姐面经干货续集《算法&研发专场》来啦
|
算法 网络安全 C语言
【毕业季征文】追光人,终将光芒万丈!
【毕业季征文】追光人,终将光芒万丈!
90 0
|
Arthas NoSQL 算法
二本院校学弟大二开始实习,大三收割阿里、腾讯实习offer
二本院校学弟大二开始实习,大三收割阿里、腾讯实习offer
二本院校学弟大二开始实习,大三收割阿里、腾讯实习offer
|
9月前
|
机器学习/深度学习 算法 定位技术
美团、滴滴、蔚来、货拉拉、Momenta、易智瑞、昆仑万维等暑期实习、日常实习技术岗面试汇总
美团、滴滴、蔚来、货拉拉、Momenta、易智瑞、昆仑万维等暑期实习、日常实习技术岗面试汇总
154 1
|
新零售 传感器 人工智能
阿里下田,农民上岸
阿里下田,农民上岸
212 0
阿里下田,农民上岸
|
人工智能 达摩院 算法
求职特训营火热来袭,阿里学长学姐助力求职之路!
本次我们邀请到了四位阿里的学姐学长进行分享。
72388 9
求职特训营火热来袭,阿里学长学姐助力求职之路!
|
Java C++ 开发工具
名校和非名校[两个实习生的事]
最近接触到两个实习生的事,写一些看法。 排名比较靠前名校的学生A:基础知识好一些,但对于目前常用的语言和软件的系统知道的甚少,通过了解,发现课程都是计算机系的常见课程,上机都是使用Turbo C之类的软件,对于目前主流的开发工具、B/S软件等所知甚少 普通的学校的学生B:基础知识还算可以,基本课...
862 0
|
Oracle 关系型数据库 MySQL
2017年北京站沙龙归来(r11笔记第100天)
  转眼间,2017已经爬上了眉梢,在有序计划中,DBAplus社群北京站沙龙拉开了序幕。 沙龙的初衷之我见     沙龙活动不光是聚聚人气,我用三句通俗的话来解释。
2227 0

热门文章

最新文章