自然语言处理算法工程师笔试题目_阿里算法工程师笔试——2020.08.03

b9b54335056dcb50bfb1a8b10c61bfd6.png

过题情况

第一题:100%
第二题:100%
说实话这场笔试题目比较简单,25minAK

第一题:n个朋友,每个人有金币x,有m个房子,每个房子有舒适度和价格,当前仅当这个人金币数大于房子价格时才能购买,每个人至多买一个房子,每个房子最多被一个人买,求最大舒适度

按舒适度从大到小排序,然后二分选择金币刚好>=价格的人进行购买,这里用multiset进行删除操作。

#includeusing namespace std;const int maxn=2e5+200;struct node{    int a,b;}c[maxn];bool cmp(node a, node b){    if(a.a==b.a)return a.bb.a;}int main(){    int n,m;    scanf("%d%d",&n,&m);    multiset st;    for(int i=0;i::iterator it;    for(int i=0;i

第二题:给定一个a-f组成的字符串,对其进行删除,要求所有的a在c和e之前且所有的c在e之前,所有的b在d和f之前且所有的d在f之前,求删除后满足串的最大长度

这里可以先把串拆成只由ace和bdf组成的串,之后对这两个串做处理,小技巧,把bdf也换成ace,这样就对两个ace的串进行操作。
一个小dp,dp[i][j]代表枚举到i位置,之前最后是j字母的最大方案数,a是0,c是1,e是2。

#includeusing namespace std;const int maxn=3e5+20;int dp[maxn][3];int ans;void solve(string t){    if(t=="")return;    int len=t.length();    if(t[0]=='a')dp[0][0]=1;    else if(t[0]=='c')dp[0][1]=1;    else dp[0][2]=1;    int cnt=1;    for(int i=1;i>s;    string s1="",s2="";    int len=s.length();    for(int i=0;i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值