跟着制药一起来刷题

目录

1.打乱字母

 2.分考场

 3.合根植物


1.打乱字母

农夫约翰将按字典序排列的 N头奶牛的名字列表贴在了牛棚的门上。

每个奶牛的名字都由一个长度介于 1 到 20 之间的由小写字母构成的唯一字符串表示。

麻烦制造者贝茜将列表中的奶牛名字重新排序打乱了列表。

此外,她还对每头奶牛的名字中的字母顺序进行了重新排列(也可能保持不变)。

给定修改过后的列表,请帮助约翰确定列表中的每个名字可能出现在原始列表中的最低和最高位置。

 题解思路:二分+贪心,题目中要求最前的位置和最后的位置,要让当前字符串排最靠前,换言之是让其他所有的字符串排最靠后,反之,要让当前字符串排最靠后,换言之是让其他的字符串排最靠前,明白了之后我们就可以用二分实现,具体看代码。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 50010;

int n;
string a[N], b[N], c[N];

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i ++ )
    {
        cin >> a[i];
        b[i] = c[i] = a[i];
        sort(b[i].begin(), b[i].end(), greater<char>());//将每个字符串的字典序从大到小排序
        sort(c[i].begin(), c[i].end());//将每个字符串的字典序从小到大排序
    }
// 先把整个序列全部变成最大值,    当前数取最小值,其余数求最大值,
    sort(b + 1, b + n + 1);//从小到大排序所有字符串
    sort(c + 1, c + n + 1);

    for (int i = 1; i <= n; i ++ )
    {

 //最小的情况在最大的数组里面找(左边界),最大的情况在最小的里面找(右边界)
        sort(a[i].begin(), a[i].end());
        int l = 1, r = n;
        while (l < r)//在全部都是最大字典序的数组中找到第一个字典序大于等于a升序排序中的元素的位置
        {
            int mid = l + r >> 1;
            if (b[mid] >= a[i]) r = mid;
            else l = mid + 1;
        }

        cout << r << ' ';
        reverse(a[i].begin(), a[i].end());
        l = 1, r = n;
        while (l < r)//在全部都是最小字典序的数组中找到最后一个字典序小于等于a降序排序中的元素的位置
        {
            int mid = l + r + 1 >> 1;
            if (c[mid] <= a[i]) l = mid;
            else r = mid - 1;
        }

        cout << r << endl;
    }

    return 0;
}

 2.分考场

题目链接 分考场

 n个人参加某项特殊考试。
  为了公平,要求任何两个认识的人不能分在同一个考场。
  求是少需要分几个考场才能满足条件。

题解思路: 我们依次枚举各个考场,如果第i个考场满足条件,学生x就进入i考场;如果i考场不满足条件,我们继续判断i+1考场。如此往复,当我们把kn个考场全部枚举完,发现学生x与每个考场都存在认识关系,那么我们必须为x新开辟一个考场了。

 该题参考博客: 历届试题 分考场_diefun的博客-CSDN博客_分考场

#include<bits/stdc++.h>
using namespace std;
int g[110][110],p[110][110];//g数组用来维护考生间关系,p数组代表的是考场中的座位号				
int n,num=110;
void dfs(int x,int kn)//x考生数 kn考场数	
{ 
	if(kn>=num) return;//说明当前考场数已经枚举完了那么就返回			
  	if(x>n) 
  	{
  	    num=min(num,kn); 
  	    return;
  	    
  	}
  	    
		
	for(int j=1;j<=kn;j++)//枚举考场 
	{						
	   	int k=0;//k是从0一直变化的,其实代表的就是考场中的座位号
	   		/*找到一个空位 并且与该考场人无关系 */
		while(p[j][k] && !g[x][p[j][k]]) k++; //如果这个当前第j个考场第k个位置上有人且x和该考生不认识的话那么就k++,
		//就判断下一个位置
		
		if(p[j][k]==0)						
		//满足条件 说明当前考场x可以坐那么就判断下一个学生
		{
			p[j][k]=x;
			dfs(x+1,kn);
			p[j][k]=0;//恢复现场
		}
   	}                                  		 	  
	p[kn+1][0]=x;//遍历所有考场 发现都不行 只能新开辟一个考场					
	dfs(x+1,kn+1);							
	p[kn+1][0]=0;									
}
int main()
{
	int m,a,b;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{ 
		cin>>a>>b;
		g[a][b]=g[b][a]=1; 	//代表他们之间认识		
	}
	dfs(1,1);
	cout<<num;
	return 0;
}

 3.合根植物

题解思路:并查集

#include<iostream>
using namespace std;
#define N 1000005
int pre[N];
int n,m,k;
int find(int x)   //边找边压缩路径
{
	if(x==pre[x])
		return x;
	return pre[x]=find(pre[x]);
}
void merge(int x,int y)//将两个点合并为同一个祖宗节点
{
	int fx=find(x);
	int fy=find(y);
	if(fx==fy)
		return;
	pre[fx]=fy;
}
void init()   //初始化
{
	for(int i=1;i<=n;i++)
		pre[i]=i;
}
int main()
{
	int ans=0,u,v;
	cin>>n>>m>>k;
	n=n*m;
	init();
	for(int i=0;i<k;i++)
	{
		cin>>u>>v;
		merge(u,v);//将输入的点进行连根
	}
	for(int i=1;i<=n;i++)
	{
		if(pre[i]==i)//祖宗节点没有改变则 ans++,改变了的说明都和别的点连成同一棵植物了
			ans++;
	}
	cout<<ans<<endl;
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MES(Manufacturing Execution System)制造执行系统是一种用于管理制造过程的软件系统。在制药行业中,MES系统的上线文档是指将MES系统投入使用时所需的相关文档。 MES系统的上线文档一般包括以下内容: 1. 实施计划:明确MES系统上线的时间安排、任务分工和责任人,确保系统的顺利上线。 2. 需求分析报告:对于制药行业特定的需求进行分析,并提供对应的解决方案。 3. 系统设计文档:详细描述MES系统的整体架构、各个模块的功能和交互关系,以及数据流程和数据格式等。 4. 配置文件:包括MES系统的配置参数、数据库连接信息、权限设置等,用于系统的部署和配置。 5. 用户手册:介绍MES系统的使用方法、操作流程和常见问的解答等,帮助用户快速上手并正确使用系统。 6. 测试报告:记录MES系统在测试阶段的各项测试结果和问反馈,为系统上线前的最后调试提供参考。 7. 培训材料:包括MES系统的培训课件、培训计划和培训实施方案等,用于对相关人员进行系统操作和使用的培训。 8. 上线方案:制定MES系统上线的详细步骤和时间计划,并规划好相应的备份和回滚措施,确保系统上线过程的安全和可控。 MES制药行业上线文档的编写和准备需要充分考虑到制药行业的特殊要求和规范,确保MES系统的上线能够顺利进行并有效地提升制药企业的生产管理效率。 ### 回答2: MES制药行业上线文档是为了提高制药企业生产管理效率的一项重要举措。MES(Manufacturing Execution System)是制造执行系统的缩写,它通过集成自动化设备、生产数据管理和信息技术,提供了一个在生产过程中进行数据采集、监控和分析的平台。 MES制药行业上线文档的目的是通过文档化的方式,将MES系统的上线过程记录下来,以供参考和复盘。具体而言,这些文档可以包括以下内容: 1. 项目目标和背景:对引入MES系统的目标进行说明,明确所解决的问和带来的好处。同时,还要说明该项目与制药行业的背景和趋势的关联性,以便形成项目的合理性和紧迫性。 2. 系统需求和设计:详细描述MES系统的功能需求和技术要求,例如生产计划排程、物料管理、质量控制、数据采集和报表输出等。同时,也需要对系统架构和界面设计进行说明,确保系统能够满足制药企业的实际需求。 3. 上线计划和阶段:制定MES系统上线的计划和时间表,明确每个阶段的目标和任务。同时,需要制定相关的测试和培训计划,确保系统能够顺利上线,并且相关人员能够熟练使用和管理。 4. 实施过程和问解决:详细记录系统的实施过程,包括系统配置、数据迁移、软硬件部署等。同时,要记录和解决在实施过程中遇到的问和难点,以便未来的参考和借鉴。 5. 上线效果和总结:分析MES系统上线后所带来的效果和改进,例如生产效率提升、质量管控能力增强等。同时,要总结本次上线的经验教训,为未来类似项目的顺利实施提供指导。 综上所述,MES制药行业上线文档是在制药企业引入MES系统时进行记录和总结的重要文档。它可以作为项目实施的参考和借鉴,同时也是对制药企业生产管理进行优化的重要工具。 ### 回答3: MES制药行业上线文档是指在制药生产过程中,使用制造执行系统(MES)的相关文档。 首先,在MES制药行业上线文档中,包含了企业实施MES系统的计划和目标。这些计划和目标可以涵盖设备集成、数据采集、制造过程控制等方面,旨在提高制药生产的效率、质量和可追溯性。 其次,文档还会包括MES系统的功能和架构设计。这些设计要考虑到制药行业的特殊需求,例如生产批次控制、物料追踪、环境监测等。通过MES系统的功能和架构设计,可以确保制药企业能够实现生产过程的集中控制和实时监控。 此外,文档还会包括MES系统的实施流程和时间表。制药企业需要按照一定的步骤来实施MES系统,包括需求分析、系统配置、测试验证等。实施流程和时间表的设立可以在企业内部制定一个明确的计划,确保MES系统的顺利上线。 最后,文档还会包括MES系统的培训计划和用户手册等。为了使制药企业的员工能够熟练操作和使用MES系统,需要进行系统培训,并提供详细的用户手册,以供用户随时查询和参考。 总之,MES制药行业上线文档是制药企业在实施MES系统过程中所需要的一系列文档,其内容主要包括企业计划目标、功能架构设计、实施流程时间表以及培训计划和用户手册等。这些文档的编写和遵循,有助于制药企业顺利实施MES系统,提高生产效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值