#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char t[100], s[100];
int nexkt[100];
void next() {
int i = 1;
nexkt[1] = 0;
int j = 0;
while (i <= strlen(s + 1)) {
if (j == 0 || s[i] == s[j]) {
i++;
j++;
nexkt[i] = j;
} else {
j = nexkt[j];
}
}
}
int kmp() {
int i = 1;
int j = 1;
while (i <= strlen(t + 1) && j <= strlen(s + 1)) {
if (j == 0 || t[i] == s[j]) {
i++;
j++;
} else {
j = nexkt[j];
}
}
if (j > strlen(s + 1))
return i - strlen(s + 1);
else
return -1;
}
int main() {
while (cin >> t + 1 >> s + 1) {
next();
if (kmp() != -1)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}
第二种方法:
#include <iostream>
using namespace std;
int a[20][20];
int main() {
int n, m;
cin >> n >> m;
int k = 0, z = 0, s = 0;
int sum = n + m - 1;
int x = n, y = m;
for (int i = s; i < x; i++) {
for (int j = 0; j <= i; j++) {
a[i][j] = k++;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}