概述
大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤。
链接: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大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复