#include<bits/stdc++.h>
#include<string>
using namespace std;
int table[26];
int i,j;
int hospl(string str,string text)
{
int lstr=str.length(),ltext=text.length();
for(i=0;i<lstr-1;i++)
{
table[str[i]-'A']=lstr-i-1;
}
int p=lstr-1;
while(p<ltext)
{
int k=0;
while(str[lstr-k-1]==text[p-k]&&k<lstr)
{
k++;
}
if(k==lstr) return p-lstr+1;
else
{
p+=table[text[p]-'A'];
}
}
return -1;
}
int main()
{
string str,text;
cin>>str>>text;
cout<<hospl(str,text)<<endl;
}
Edit Distance
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
int d[10005][10005];
int main() {
string strA,strB;
cin>>strA>>strB;
int s1=strA.length();
int s2=strB.length();
for(int i=0;i<=s1;i++)//每行0列
d[i][0]=i;
for(int j= 0;j<=s2;j++)//0行每列
d[0][j]=j;
for(int i=1;i<=s1;i++)
{
for(int j=1;j<=s2;j++)
{
if(strA[i-1]==strB[j-1]) //字符串是从0开始的
d[i][j]=d[i-1][j-1]; //相同不做改变,距离为子问题距离
else
{ //比较上、左、左上,找最小距离 + 1
d[i][j]=min(d[i-1][j-1],min(d[i][j-1],d[i-1][j]))+1;
}
}
}
cout<<d[s1][s2]<<endl;
return 0;
}
Coin-collecting by robot
#include <bits/stdc++.h>
using namespace std;
int n,m;
int map1[1001][1001];
int a[1001][1001];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin >> map1[i][j];
}
}
a[1][1] = map1[1][1];
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j){
a[i][j]= max(a[i-1][j],a[i][j-1])+map1[i][j];
}
}
cout<<a[n][m]<<endl;
}
Coin-row problem
#include <bits/stdc++.h>
using namespace std;
int n;
int map1[1001];
int a[1001];
int main() {
cin >> n ;
for (int i = 1; i <=n ; ++i) {
cin>>map1[i];
}
a[1]=map1[1];
for (int i = 2; i <=n ; ++i) {
a[i]= max(a[i-1],a[i-2]+map1[i]);
}
cout<<a[n]<<endl;
return 0;
}