P3375 【模板】KMP
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1,s2;
cin>>s1>>s2;
int a=s1.length(),b=s2.length();
for(int i=0;i<=a-b;i++){
if(s1.substr(i,b)==s2.substr(0,b)){
cout<<i+1<<"\n";
}
}
int num=0;
while(b--){
int max=0;
string s3;
for(int i=0;i<=num;i++){
s3+=s2[i];
}
for(int i=0;i<=num;i++){
if(s3.substr(0,i)==s3.substr(num-i+1,i)&&i>max){
max=i;
}
}
cout<<max<<" ";
num++;
}
return 0;
}
substr:
在给定字符串 s
上调用 s.substr(pos, len)
会返回从位置 pos
开始、长度为 len
的子字符串。pos
: 子字符串的起始位置,从 0 开始计数。len
: 要提取的子字符串的长度。
P2580 于是他错误的点名开始了
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n;
string s1[n];
int s[n]={0};
for(int i=0;i<n;i++){
cin>>s1[i];
}
cin>>m;
string s2[m];
for(int j=0;j<m;j++){
cin>>s2[j];
}
int num=0;
for(int k=0;k<m;k++){
for(int l=0;l<n;l++){
if(s2[k]==s1[l]){
if(s[l]==0){
cout<<"OK"<<"\n";
s[l]=1;
}else if(s[l]!=0){
cout<<"REPEAT"<<"\n";
}
}else{
num++;
}
}
if(num==n){
cout<<"WRONG"<<"\n";
}
num=0;
}
return 0;
}
字符串数组s1为名单,s2为教练报的名字,数组s表示表示某一名字是否访问,num计数,若num等于n,即名单中没有该名字。