最小表示法

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

const int maxn = 1000010;
char a[maxn];

int Getmin(char a[])
{
	int n = strlen(a);
	int i = 0, j = 1, k = 0, t;
	while (i < n&&j < n&&k < n)
	{
		t = a[(i + k) % n] - a[(j + k) % n];
		if (!t)
			k++;
		else
		{
			if (t > 0)
				i += k + 1;
			else
				j += k + 1;
			if (i == j)
				j++;
			k = 0;
		}
	}
	return min(i, j);
}

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; ++i)
	{
		cin >> a[i];
	}
	cout << Getmin(a);
	return 0;
}

留下评论