我是靠谱客的博主 鳗鱼指甲油,最近开发中收集的这篇文章主要介绍牛客每日练习----工厂流水线,大家一起来数二叉树吧,Just A String大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤。

链接:https://ac.nowcoder.com/acm/problem/13587
来源:牛客网
 

题目描述

现代化工厂的生产,讲究流水化作业,只有合理的作业安排,才能保证较高的生产效率。工作人员给出了他们手动安排的机器流水线作业表,但碍于机器数量以及工序较多,人为检验方案是否可行,难度较大,你能否通过编写程序来帮助他们检验呢?

工厂流水线作业机制如下:

工厂生产的产品是由一步步零件不断加工和装配完成的。产品的加工需按照严格的工序进行,即只有一个零件所需的全部组件的上一步工序完成,才能进行下一步工序,且保证上一步的组件只会被下一步中一个零件引用,每台机器同时开始加工,流水线严格按照时序进行,不存在等待情况。

示意图中的黑线代表工序先后关系,样例1情况如下:

样例2情况如下所示,黑×位置的工序关系不成立,故方案不可行。

输入描述:

第一行输入一个正整数t(t<=200),代表检验的方案数。随后每组数据第一行,输入一个正整数n(n<=30),代表机器数量。随后n组数据,每组数据第一行输入一个正整数m(m<=30),代表该机器上的加工零件数。随后m组数据,每组数据第一行三个正整数,id(零件在该方案中唯一的id号),time(该项零件加工完成所需的小时数),p(该零件加工需要几个零件),随后p行,每行一个正整数idx,分别代表该零件加工所需的零件id。

输出描述:

对于每个方案,若该方案中每组零件都能严格按照流水线机制完成生产,则输出“Yes”,否则输出“No”。

示例1

输入

复制

2
3
3
1 1 0
2 3 0
3 5 1
4
3
4 3 0
5 3 2
1
7
6 1 1
5
4
7 2 0
8 3 0
9 2 1
2
10 1 0
2
2
1 1 0
2 3 1
3
2
3 2 0
4 2 1
1

输出

复制

Yes
No
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int T,n,m,id,p,idx;
struct node
{
    int ks;
    int sj;
    vector<int> V;
};
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        vector<node>s(905);
        scanf("%d",&n);
        while(n--)
        {
            int ks=0;
            scanf("%d",&m);
            while(m--)
            {
                node tmp;
                tmp.ks=ks;
                scanf("%d%d%d",&id,&tmp.sj,&p);
                while(p--)
                {
                    scanf("%d",&idx);
                    tmp.V.push_back(idx);
                }
                ks+=tmp.sj;
                s[id]=tmp;
            }
        }
        int fg=1;
        for(int i=1; i<s.size(); i++)
        {
            for(int j=0; j<s[i].V.size(); j++)
            {
                int index=s[i].V[j];
                if(s[i].ks<(s[index].ks+s[index].sj))
                    fg=0;
            }
        }
        if(fg)
            printf("Yesn");
        else
            printf("Non");
    }
    return 0;
}

链接:https://ac.nowcoder.com/acm/problem/13593
来源:牛客网

 

 

题目描述

某一天,Zzq正在上数据结构课。老师在讲台上面讲着二叉树,zzq在下面发着呆。

突然zzq想到一个问题:对于一个n个节点,m个叶子的二叉树,有多少种形态呐?你能告诉他吗?

对于第一组样例的解释

 

输入描述:

每一组输入一行,两个正整数n,m(n<=50)意义如题目

输出描述:

每一行输出一个数,表示相应询问的答案取模1000000007

示例1

输入

复制

4 2
10 5

输出

复制

6
252

备注:

a取模b等于a%b,即a除以b的余数
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
#define mod 1000000007
typedef long long ll;
using namespace std;
int n,m;
ll dp[60][60];
void init()
{
    dp[0][0]=1;
    dp[1][1]=1;
    for(int i=1; i<=50; i++)
    {
        for(int j=1; j<i; j++)
        {
            for(int x=0; x<i; x++)
            {
                for(int y=0; y<=j; y++)
                {
                    if(y>x)
                        break;
                    dp[i][j]=dp[i][j]+dp[x][y]*dp[i-1-x][j-y];
                    dp[i][j]%=mod;
                }
            }
        }
    }
}
int main()
{
    init();
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n<m)
            printf("0n");
        else
            printf("%lldn",dp[n][m]);
    }
    return 0;
}

链接:https://ac.nowcoder.com/acm/problem/13821
来源:牛客网

 

 

题目描述

何老师手中有一个字符串S,他发现这个字符串有一个神奇的性质,取出一个长为i的前缀(就是由S的前i个字符顺序构成的字符串)prei和一个长为j的后缀(就是由S的后j个字符顺序构成的字符串)sufj之后,总是存在三个字符串A,B,C(可能为空)使得prei=A+B,sufj=B+C, 虽然这听起来像是一句废话。 

显然三元组A,B,C不总是唯一的,何老师从所有可能的三元组中找到B最长的,很容易知道这样的三元组是唯一的,并且认为prei和sufj的契合度就是f(i,j)=|A||B|2|C|,现在你需要帮何老师算出所有f(i,j)(0 ≤ i,j ≤ n)的异或和。 

这里|X|表示字符串X的长度,X+Y表示将两个字符串X和Y顺序拼接起来后得到的新字符串。

输入描述:

第一行是一个正整数T(≤ 500),表示测试数据的组数, 每组测试数据,包含一个仅由小写字母构成的非空字符串S(|S| ≤ 2000), 保证满足|S|>200的数据不超过5组。

输出描述:

对于每组测试数据,输出所有f(i,j)(0 ≤ i,j ≤ n)的异或和。

示例1

输入

复制

1
abcab

输出

复制

13
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
#define mod 1000000007
typedef long long ll;
using namespace std;
int T,nx[2100];
ll jg;
void kmp(string str)
{
    int j=0,i=-1;
    nx[0]=-1;
    while(j<str.size())
    {
        if(str[j]==str[i]||i==-1)
            nx[++j]=++i;
        else
            i=nx[i];
    }
}
void getnx(string str1,string str2)
{
    kmp(str2);
    int i=0,j=0;
    while(j<str1.size())
    {
        if(str1[j]==str2[i])
        {
            i++;
            j++;
            jg^=i*i*(str2.size()-i)*(j-i);
        }
        else if(i==-1)
        {
            i++;
            j++;
        }
        else
            i=nx[i];
    }
}
int main()
{
    cin>>T;
    while(T--)
    {
        string str;
        jg=0;
        cin>>str;
        for(int i=0; i<str.size(); i++)
            getnx(str,str.substr(i));
        cout<<jg<<endl;
    }
    return 0;
}

最后

以上就是鳗鱼指甲油为你收集整理的牛客每日练习----工厂流水线,大家一起来数二叉树吧,Just A String大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤。的全部内容,希望文章能够帮你解决牛客每日练习----工厂流水线,大家一起来数二叉树吧,Just A String大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部