符号是否匹配//数组中等于x的有几个(桶排序)总结:

1

烤烤最近在一家数据公司实习。实习生嘛,被分配到的总是特别枯燥的任务,他的任务是对一串字符(不超过50个字符,可能包括括号、数字、字母、标点符号、空格)进行字符匹配的判断。

要求检查这一串字符中的( ) ,[ ],{ }是否匹配。做了一上午,烤烤眼睛都看花了,所以希望你来帮帮他 !

Input

输入数据有多组,每组数据不超过100个字符并含有( ,) ,[, ],{, }一个或多个。处理到文件结束。

Output

如果匹配就输出“yes”,不匹配输出“no”

Sample Input

 
sin(20+10)  
{[}] 

Sample Output

yes

no

#include<stdio.h>
#include<string.h>
int main()
{
	char a[100010],b[100010]= {0};
	int flag,j,k;
	while(gets(a)!=NULL)//NULL相当于0; 
	{
		flag=0;
		j=1;
		memset(b, 0, sizeof(b));//对B数组清零; 
		for(int i=0; i<strlen(a); i++)
		{
			if(a[i]=='('||a[i]=='{'||a[i]=='[')
				b[j++]=a[i];//暂且b[2]==a[i] 
			else if(a[i]==')')
			{
				if(b[j-1]==0)//b[1]=0就是前面没有(,不配对。 
				{
					flag=1;//标记 
					break;
				}
				else if(b[j-1]=='(')//如果有,清零,j--;下一次循环 
				{
					b[j-1]=0;
					j--;
				}
				else//有可能有其他数字 字符等 
				{
					flag=1;//标记 
					break;
				}
			}
			else if(a[i]=='}')
			{
				if(b[j-1]==0)
				{
					flag=1;
					break;
				}
				else if(b[j-1]=='{')
				{
					b[j-1]=0;
					j--;
				}
				else
				{
					flag=1;
					break;
				}
			}
			else if(a[i]==']')
			{
				if(b[j-1]==0)
				{
					flag=1;
					break;
				}
				else if(b[j-1]=='[')
				{
					b[j-1]=0;
					j--;
				}
				else
				{
					flag=1;
					break;
				}
			}//都是同样处理。 
			if(flag==1) break;//三个找完了判断如果不符合就结束循环 
		}
		if(flag==0&&b[1]==0)
		printf("yes\n");
		else
		printf("no\n");

	}
	return 0;
}

2(这个真的嘎嘎简单,居然没想到桶排序)

蒜头君手上有个长度为 nn 的数组 AA。由于数组实在太大了,所以蒜头君也不知道数组里面有什么数字,所以蒜头君会经常询问在数组 AA 中,等于 xx 的数字有多少个?

输入格式

第一行输入两个整数 nn 和 mm,分别表示数组的长度和查询的次数。

接下来一行有 nn 个整数 a_iai​。

接下来 mm 行,每行有 11 个整数 xx,表示蒜头君询问的整数。

输出格式

对于每次查询,输出一个整数,表示数组 AA 中有多少个 xx。

数据范围

1 \le n, m \le 10^5, 0 \le x \le 10^61≤n,m≤105,0≤x≤106。

Sample Input

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

Sample Output

0
3
0
1
0
#include<stdio.h>
int c[1000100];
int main()
{
	int n,m,w;
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&w);
		c[w]++;//有同样的直接放在同一个桶里; 
	}
	for(int j=0;j<m;j++)
	{
		scanf("%d",&w);
		printf("%d\n",c[w]);//直接输出桶里的个数就好了 
	}
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值