计算next值
#include "stdio.h"
#include "stdlib.h"
#include <iostream>
using namespace std;
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];
void get_next(SString T, int next[]) {
next[1] = 0;
int i = 1, j = 0;
while (i < T[0])
{
if (j == 0 || T[i] == T[j])
{
next[++i] = ++j;
}
else
j = next[j];
}
}
int main() {
int next[MAXSTRLEN];
SString S;
int n, i, j;
char ch;
scanf("%d", &n);
ch = getchar();
for (i = 1; i <= n; i++)
{
ch = getchar();
for (j = 1; j <= MAXSTRLEN && (ch != '\n'); j++)
{
S[j] = ch;
ch = getchar();
}
S[0] = j - 1;
get_next(S, next);
printf("NEXT J is:");
for (j = 1; j <= S[0]; j++)
printf("%d", next[j]);
printf("\n");
}
return 0;
}
KMP算法
#include "stdio.h"
#include "stdlib.h"
#include <iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASLBLE -1
#define OVERFLOW -2
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];
void get_next(SString T, int next[]) {
next[1] = 0;
int i = 1, j = 0;
while (i < T[0])
{
if (j == 0 || T[i] == T[j])
{
next[++i] = ++j;
}
else
j = next[j];
}
}
int Index_KMP(SString S, SString T, int pos) {
int next[MAXSTRLEN + 1];
get_next(T, next);
int i = pos, j = 1;
while (i <= S[0] && j <= T[0])
{
if (S[i] == T[j] || j == 0)
{
i++;
j++;
}
else
j = next[j];
}
if (j > T[0]) return i - T[0];
return 0;
}
int main()
{
SString T, S;
int i, j, n;
char ch;
int pos;
scanf("%d", &n);
ch = getchar();
for (j = 1; j <= n; j++)
{
ch = getchar();
for (i = 1; i <= MAXSTRLEN && (ch != '\n'); i++)
{
S[i] = ch;
ch = getchar();
}
S[0] = i - 1;
ch = getchar();
for (i = 1; i <= MAXSTRLEN && (ch != '\n'); i++)
{
T[i] = ch;
ch = getchar();
}
T[0] = i - 1;
pos = Index_KMP(S,T,1) ;
printf("%d\n", pos);
}
return 0;
}
不完整的排序
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
int i = 0, j = n - 1;
while (i < j)
{
while (i < j && a[i] < 0)
i++;
while (i < j && a[j]>0)
j--;
swap(a[i], a[j]);
}
for (int i = 0; i < n; i++)
cout << a[i] << ' ';
cout << endl;
}
return 0;
}