• 【洛谷P1368】工艺【最小表示法】


    题目大意:

    题目链接:https://www.luogu.org/problemnew/show/P1368
    求一个数字串的最小表示法。


    思路:

    最小表示法模板题其实是我不会SAM
    最小表示法,顾名思义,就是一个数列,把它看成一个环,在不改变它顺序的情况下的字典序。
    不多解释了,看代码吧。


    代码:

    #include <cstdio>
    #include <algorithm> 
    using namespace std;
    
    int n,a[10000005],i,j,k;
    
    int main()
    {
    	scanf("%d",&n);
    	for (i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		a[i+n]=a[i];  //复制一遍,防止越界
    	} 
    	i=1; j=2;   //初始化
    	while (i<=n&&j<=n)
    	{
    		for (k=0;k<=n;k++)  //枚举相同位数
    		 if (a[i+k]!=a[j+k]) break;  //不相同就退出
    		if (k==n) break;  //全部相同
    		if (a[i+k]>a[j+k])  //找到更小的表示方法
    		{
    			i=i+k+1;
    			if (i==j) i++;
    		}
    		else  //否则
    		{
    			j=j+k+1;
    			if (i==j) j++;
    		}
    	}
    	for (k=min(i,j);k<min(i,j)+n;k++) 
    	 printf("%d ",a[k]);
    	return 0;
    }
    
  • 相关阅读:
    iOS基础
    iOS基础 ----- 内存管理
    NSAttributedString 的一些基本用法
    node安装使用
    docker常用命令
    docker lnmp
    easy-wechat
    composer
    center7系统搭建lnmp
    xammp环境配置
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998694.html
Copyright © 2020-2023  润新知