南阳理工学院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字符串,我们很容易地就能想到位运算操作。那么对区间的移动:
有:
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)); }}
阅读全文
0 0
- 南阳理工学院OJ
- 南阳理工学院OJ
- 南阳理工学院 OJ 16 矩形嵌套
- 南阳理工学院OJ—77开灯问题
- 南阳理工学院oj第二题括号配对
- 南阳理工学院oj上的传纸条
- 南阳理工学院
- 南阳理工学院oj第22题素数求和问题
- 南阳理工学院OJ 擅长排列的小明
- 有感“南阳理工学院”
- 南阳理工学院第九题
- 南阳理工学院25题
- 南阳理工学院 ACM OJ-- 题目6 喷水装置(一) (贪心暴力)
- 南阳理工学院信息检索平台
- 南阳理工学院csdn发展计划书
- 南阳理工学院软件月赛
- 南阳理工学院软件月赛
- 南阳理工学院--蛇形填数
- 遇C语言条件编译就犯怵,不知什么意思,c语言头文件中的宏定义
- 2017菜鸡C与C++工程师总结,撸码撸码,垃圾专科生撸码人生
- C语言的恶趣味,胆小者莫入,以免入门到放弃,C语言夺命题十例!
- Lintcode 11. 二叉查找树中搜索区间
- 为什么学习C语言这么久,看的懂代码,做不出题,写不出来项目?
- 南阳理工学院OJ
- MyBatis小介绍与ibatis
- 如何去除桌面快捷方式的小箭头
- n个数的排序
- 韬光养晦一周年,拍拍二手品牌为何今日才“亮剑”?
- PCA及白化的数学理解
- ubuntu 16.04源
- 从整数数组中找出唯二奇数次的数字 Python版
- 单链表 c实现 详细注释