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;
}