南阳理工学院OJ

来源:互联网 发布:ubuntu命令行升级系统 编辑:程序博客网 时间:2024/06/10 09:34

题目给出n组01字符串,每组字符串有A,B两个,len_A<=10,len_B<=1000,求B中与A相同的字串个数。
C++做法:
用String头文件中的compare函数即可

#include <iostream>#include <string>using namespace std;int main(){    int n,i,j,lena,lenb,cnt;string A,B;    cin>>n;    for(i=0;i<n;i++){        cin>>A>>B;        lena=A.length();lenb=B.length();cnt=0;        for(j=0;j<=lenb-lena;j++){            if(B.compare(j,lena,A)==0)cnt++;        }        cout<<cnt<<endl;    }}

C语言做法:
既然是01字符串,我们很容易地就能想到位运算操作。那么对区间的移动:

string[a,a+len1]string[a,a+len]string[a+1,a+len]

有:

c=((c<<1)&~(1<<lena))+B[j]-'0'//c为区间的01字符串代表的二进制数

即将c左移一位与11110111111与运算,0是第len位,再加上新进入区间的字符

#include <stdio.h>#include <string.h>using namespace std;char A[15],B[1005];int main(){    int n,i,j,a,c,lena,lenb,cnt;    scanf("%d",&n);    for(i=0;i<n;i++){            scanf("%s%s",A,B);            lena=strlen(A);lenb=strlen(B);            if(lenb<lena)printf("0\n");            else{                j=a=c=0;            while(j<lena){                a=(a<<1)+A[j]-'0';                c=(c<<1)+B[j++]-'0';            }            cnt=(a==c);               for(j=lena;j<lenb;j++)cnt+=(a==(c=((c<<1)&~(1<<lena))+B[j]-'0'));            printf("%d\n",cnt);        }        memset(A,0,sizeof(A));memset(B,0,sizeof(B));    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 绅士仓 科学上网浏览器 Apache2.4反向代理http pci设备驱动 C语言实验题――打印菱形 C语言实验题――三个数排序 C语言实验题――三角形面积 C语言实验题――两个数比较 C语言实验题――温度转换 C语言实验题――鸡兔同笼 输入入门(1) C语言实验题――最小公倍数和最大公约数 C语言实验题――分数序列 C语言实验题――数组逆序 C语言实验题――一元二次方程 C语言实验题――某年某月的天数 相邻最大数 Picture 羊村运动会――撑杆跳高 字符矩阵排序 1535:找规律填数字 idm6.38 C语言实验题――圆周率 缺陷检测 成都瓶儿 谭松韵 桥本 YouTube、Google+、Facebook、Twitter、维基百科最全hosts C语言实验题――拍皮球 求奇数的乘积 C语言实验题――字符编码 intellijlicense andriod导航栏 mfc文件上传下载 Eclipse4.8中搭建Android开发环境 1178:C语言实验题――单词统计 现在小明决定实现一个类似malloc的内存分配系统,具体来说,他需要连续处理若干申请内存的请求,这个 给定某二叉树的前序序列和中序序列,输出该二叉树的后序序列。(输入的前序遍历和中序遍历的结果中都不含重 vibe twitter 幼呦