首页 > 阿里暑期实习笔试3.15
头像
仅存老实人
编辑于 2021-03-15 21:30
+ 关注

阿里暑期实习笔试3.15

位运算贪心

#include
#include
#include
#include
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int a,b,c;
        cin>>a>>b>>c;
        vector a2(30,0);
        vector b2(30,0);
        vector c2(30,0);
        for(int i=0;i<30;i++)
        {
            if(a&(1<<i))a2[i]=1;
            if(b&(1<<i))b2[i]=1;
            if(c&(1<<i))c2[i]=1;
        }
        int res = 0;
        for(int i=0;i<30;i++)
        {
            if(c2[i]==0)
            {
                if(a2[i]==1)res++;
                if(b2[i]==1)res++;
            }
            else
            {
                if(a2[i]==1 || b2[i]==1)continue;
                else res++;
            }
        }
        cout<<res<<endl;
    }
    return 0;
}

带递归次数约束的期望dp

#include
#include
#include
#include
#include
using namespace std;
const int N=10010;
double f[N];
int dp(int n,int d)
{
    if(d==0)return n;
    if(f[n])return f[n];
    double res = 0.0;
    for(int i=1;i<=n-1;i++)
    {
        double maxi = max(i,n-i);
        double mini = min(i,n-i);
        if(maxi-mini>=2&&d>0)res+=(mini+dp(maxi-mini,d-1))/(n-1);
        else res+=maxi/(n-1);
    }
    f[n]=res;
    return res;
}
int main()
{
    memset(f,0,sizeof f);
    int n;
    cin>>n;
    f[1]=1;
    f[2]=1;
    vector res;
    dp(n,2);
    int tmp=f[n]*10000;
    while(tmp)
    {
        res.push_back(tmp%10);
        tmp/=10;
    }
    reverse(res.begin(),res.end());
    for(int i=0;i<5;i++)
    {
        cout<<res[i];
        if(i==0)cout<<".";
    }
    // printf("%.",f[n]);
    return 0;
}

全部评论

(0) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐