ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

牛客练习赛64 D宝石装箱

2020-05-26 09:55:48  阅读:333  来源: 互联网

标签:练习赛 string int pos 牛客 while 64 nex size


题面

题目链接

https://ac.nowcoder.com/acm/contest/5633/D

题目大意

n 颗宝石装进 n 个箱子使得 , 每个箱子中都有一颗宝石

其中第 i 颗宝石不能装入第 ai 个箱子 , 求合法的装箱方案数。

解题思路

总的装箱方案为 N! ,答案 = 总方案数 - $\sum ^{n}_{i=0}f\left( i\right) $ , 其中 f(x) 表示 x 个箱子不合法的方案数

我们定义 dp[i][j] 表示前 i 个箱子有 j 个放了不合法的宝石其他 i - j 个箱子不放宝石的方案数

那么 $dp_{ij}=dp_{i-1j}+dp_{i-1j-1}\times a_{i}$ , 前 n 个箱子至少有 i 个不合法的方案数为 $dp_{ni}\times \left( n-i\right) !$

AC_Code

#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
string s[N] ;
int nex[N];
void get_nex(string s , int *nex)
{
    int i = 0 , j = -1 , len = s.size();
    nex[i] = j;
    while(i < len)
    {
        while(j != -1 && s[i] != s[j]) j = nex[j];
        nex[++ i] = ++ j ;
    }
}
int KMP(string s , string t)
{
    get_nex(t , nex) ; 
    int i = 0 , j = 0 , lens = s.size() , lent = t.size();    
    while(i < lens)
    {
        while(j != -1 && s[i] != t[j]) j = nex[j];
        i ++ , j ++ ;
        if(j == lent) return lent;
    }
    return j;
}
int solve(string a , string b , string c)
{
    int pos = KMP(a , b);
    a += b.substr(pos , b.size() - pos);
    pos = KMP(a , c);
    return a.size() + c.size() - pos;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin >> s[1] >> s[2] >> s[3];
    sort(s + 1 , s + 1 + 3);
    int ans = s[1].size() + s[2].size() + s[3].size();
    do{
        ans = min(ans , solve(s[1] , s[2] , s[3]));
    }while(next_permutation(s + 1 , s + 1 + 3));
    cout << ans << '\n' ;
    return 0;
}

 

标签:练习赛,string,int,pos,牛客,while,64,nex,size
来源: https://www.cnblogs.com/StarRoadTang/p/12963540.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有