NEUQACM第三次双周赛-创新互联

这里写目录标题
  • 7-1 打字
    • 题目描述
    • 解题方法
    • 解题代码
  • 7-2 分香肠
    • 题目描述
    • 解题方法
    • 解题代码
  • 7-3 h0145. 会议安排
    • 题目描述
    • 解题方法
    • 解题代码
  • 7-4 神秘密码
    • 题目描述
    • 解题方法
    • 解题代码
  • 7-5 h0114.国王游戏
    • 题目描述
    • 解题方法
    • 解题代码

成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、成都网站设计、北关网络推广、微信小程序定制开发、北关网络营销、北关企业策划、北关品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;成都创新互联为所有大学生创业者提供北关建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com7-1 打字 题目描述

请添加图片描述

请添加图片描述

解题方法

没有简单的方法,就是直接模拟,硬核模拟题,按照题目的描述输入输出就能解决

解题代码
#include#includeusing namespace std;
int main()
{int lx=0,lw=0,lz=0,ls=0;
	int rs=0,rz=0,rw=0,rx=0;
	string s;
	cin>>s;
	for(int i=0;iif(s[i]=='`'||s[i]=='1'||s[i]=='Q'||s[i]=='A'||s[i]=='Z')
		{	lx++;
		}
		else if(s[i]=='2'||s[i]=='W'||s[i]=='S'||s[i]=='X')
		{	lw++;
		}
		else if(s[i]=='3'||s[i]=='E'||s[i]=='D'||s[i]=='C')
		{	lz++;
		}
		else if(s[i]=='4'||s[i]=='R'||s[i]=='F'||s[i]=='V'||s[i]=='5'||s[i]=='T'||s[i]=='G'||s[i]=='B')
		{	ls++;
		}
		else if(s[i]=='6'||s[i]=='Y'||s[i]=='H'||s[i]=='N'||s[i]=='7'||s[i]=='U'||s[i]=='J'||s[i]=='M')
		{	rs++;
		}
		else if(s[i]=='8'||s[i]=='I'||s[i]=='K'||s[i]==',')
		{	rz++;
		}
		else if(s[i]=='9'||s[i]=='O'||s[i]=='L'||s[i]=='.')
		{	rw++;
		}
		else rx++;//此处的else可以省去大量代码
	}
	cout<
7-2 分香肠 题目描述

请添加图片描述

解题方法

可以看出,以下切割策略是最佳的。
我们将香肠排列成一条直线,一条接着一条(从而获得由N个较短线段组成的线段)。将这条线切割成M个相等的线段可以得到所需的解。虽然我们在概念上做的是M-1切,但其中一些不是真正的切,而是落在香肠之间(较短的线段)。
因此,我们可以简单地使用for循环来检查,对于对于每一次切割,它是真切割还是原本中间就是分开的。

其实,通过数学思想归纳,可以得出一个明确的公式:解=M-gcd(N,M) (gcd即大公约数)

带入此公式则最为简单。

解题代码
#include#includeusing namespace std;
int gcd(int a,int b)//得出大公约数
{if(b==0) return a;
	return gcd(b,a%b);
}
int main()
{int n,m;
	cin>>n>>m;
	n%=m;//多出的部分拿来切,其余可以直接整个分给客人
	int ans=m-gcd(n,m);//运用公式
	cout<
7-3 h0145. 会议安排 题目描述

请添加图片描述
请添加图片描述

解题方法

阅读此题,能够了解到此为经典的贪心算法中的区间问题。

我们要使参加的活动大,则要使每前一个活动的时间越早举行完,后一个活动就能越早开始,则空余时间就能多出来给后面的活动,此为本题的贪心思想。

所以区间从小到大排序,每次取一个最早开展的活动,如果遇到下一个活动时间结束的早,就更新此时最晚的活动时间,但此时的活动数目不变。

解题代码
#include#include
using namespace std;
struct tt{int x,y;
}a[10005];
int cmp(tt a,tt b)//比大小
{return a.xint m,n;
	cin>>m;
	while(m--)
	{int tmax=0,ans=0;
		cin>>n;
		for(int i=0;i	cin>>a[i].x>>a[i].y;
		}
		sort(a,a+n,cmp);
		for(int i=0;i	if(tmax<=a[i].x)
			{		ans++;//活动数目增加
				tmax=a[i].y;//更新活动结束最晚时间
			}
			else if(tmax>a[i].y)//如果遇到下一个活动结束时间更早,则更新时间,但是活动数目不会发生改变
			{		tmax=a[i].y;
			}
		}
		cout<
7-4 神秘密码 题目描述

请添加图片描述

解题方法

看到此题,我们的想法就是用栈,但是过程未免太过于繁杂,所以我们可以想着递归能不能解决。

每当我们遇到 ′ [ ′ '[' ′[′时,直接递归寻找里面的字符串,进行之类的运算,再遇到 ′ ] ′ ']' ′]′时返回所得到的部分字符串。

解题代码
#include#includeusing namespace std;
string print()
{string str,s;
    char c;
    int n;
    while(cin>>c)
    {if(c=='[')
        {cin>>n;
            s=print();//递归寻找括号里的字符串
            while(n--) str+=s;//按照题目要求扩大字符串
        }
        else 
        {if(c==']') return str;//遇到反括号则返回本次递归的字符串
            else str+=c;
        }
    }
    return str;
}
int main()
{cout<
7-5 h0114.国王游戏 题目描述

请添加图片描述
请添加图片描述

解题方法

本题看似是贪心算法,实则是已经按照数学思想可以把队伍的中大臣从小到大顺序排序,按照题目算法,则可以形成关系式 A i ∗ B i < A i + 1 ∗ B i + 1 Ai*BiAi∗Bi

其余则是按照高精度算法进行两数之间的乘法。

解题代码
#include#include#include
using namespace std;
struct person{long long left,right;
}m[1000010];
int sum[1000010]={0,1},len=1;
int cmp(person a,person b)
{return a.left*a.rightint n;
	cin>>n;
	for(int i=0;i<=n;i++)
	{cin>>m[i].left>>m[i].right;
	}
	sort(m+1,m+1+n,cmp);//排序
	for(int i=0;ifor(int j=1;j<=len;j++)//sum数组每一位和大臣左数字相乘
		{	sum[j]*=m[i].left;
		}
		for(int j=1;j<=len;j++)//进行进位
		{	sum[j+1]+=sum[j]/10;
			sum[j]%=10;
		}
		len++;//前一次循环进位只是最高位进位了
		while(sum[len]/10)//进行最高位及之后的进位
		{	sum[len+1]=sum[len]/10;
			sum[len]%=10;
			len++;
		}
		if(sum[len]==0) len--;//防止最高位为0
	}
	for(int i=len;i>=1;i--)//sum一定是大的,则直接进行除法
	{sum[i-1]+=(sum[i]%m[n].right*10);//下一位进行除法时,记得加上前一位数字
		sum[i]/=m[n].right;
	}
	while(!sum[len]) len--;//判断
	if(len==0) cout<<1<=1;i--) cout<

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:NEUQACM第三次双周赛-创新互联
当前链接:http://bzwzjz.com/article/degsdi.html