我是靠谱客的博主 虚拟荷花,最近开发中收集的这篇文章主要介绍[2020-3-13]BNUZ套题比赛div3 题解目录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

A: Row
B: Bus of Characters
C: Cut 'em all
D: Infinity Gauntlet
E: High School: Become Human
F: Three displays

A: Row

solution

给字符串最前面和最后面各加个零,表示空座位。任何人旁边都没有人即不能有“11”,在不违反以上条件情况下,不能再多坐人,即没有“000”。

AC_Code
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	string a;
	cin>>n>>a;
	a = '0' + a + '0';
	if(a.find("000")==-1 && a.find("11")==-1)
		printf("Yesn");
	else
		printf("Non");
	return 0;
} 

B: Bus of Characters

solution

内向的人会选择空位并宽度较小的座位,而外向的人选择有人的座位并宽度较大的座位。可知,肯定是内向的人先上车。先将座位宽度做升序排列,使内向的人尽可能得到宽度较小的座位,而外向的人得到靠近内向人并宽度尽可能大的座位。用栈和队列。

code
#include<stdio.h>
#include<algorithm>
#include<stack>
using namespace std;

struct node
{
	int val;
	int idx;
}a[200001];

char x[400002];
int cmp(node a,node b)
{
	if(a.val < b.val)
		return 1;
	else
		return 0;
}
stack<node>s; 
int main()
{
	int n;
	struct node k;
	scanf("%d",&n);
	for(int i=0; i<n; i++)
	{
		scanf("%d",&a[i].val);
		a[i].idx = i;
	}
	sort(a,a+n,cmp);    //升序排列 
	getchar();
	gets(x);
	for(int i=0,j=0; i<2*n; i++)
	{
		if(x[i] == '0')
		{
			s.push(a[j]);  //进栈
			j++;
			printf("%d",a[j-1].idx+1);
		}
		else
		{
			k = s.top();
			printf("%d",k.idx+1);
			s.pop();
		}
	}
	return 0;
}

D: Infinity Gauntlet

solution

用二维数组分别存储颜色和代表,输入n,则缺少的就是6-n。若输入有数组中的颜色则略过,否则输出相应缺少的代表。

code
#include<stdio.h>
int main()
{
	int n;
	char s[10];
	char a[7][8] = {"purple","green","blue","orange","red","yellow"};;
	char b[7][8] = {"Power","Time","Space","Soul","Reality","Mind"};
	scanf("%d",&n);
	
	for(int i=0;i<n; i++)
	{
		scanf("%s",s);
		for(int i=0; i<6; i++)
		{
			if(s[0] == a[i][0])
			{
				a[i][0] = '-';
				break;
			}
		}
	}
	printf("%dn",6-n);
	for(int i=0; i<6; i++)
	{
		if(a[i][0] != '-')
			printf("%sn",b[i]);
	}
	return 0;
}

E: High School: Become Human

solution

比较x的y次方和y的x次方。不能用pow()函数,会超出范围。那就用
x^y = y * e ^ln(x)。

code
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define min 0.000000001
int main()
{
	double x,y;
	char num[1000];
	while(~scanf("%lf %lf",&x,&y))
	{
		double a,b;
		a = y*log(x);
		b = x*log(y);
		if(abs(a-b) < min)
			printf("=n");
		else if(a-b>min)
			printf(">n");
		else
			printf("<n");
	}
	return 0;
} 

最后

以上就是虚拟荷花为你收集整理的[2020-3-13]BNUZ套题比赛div3 题解目录的全部内容,希望文章能够帮你解决[2020-3-13]BNUZ套题比赛div3 题解目录所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部