最小表示法 P1368

首先我们要找最小的,其实可以通过逆向思维,把所有大的都排除就可以得到小的,详细见代码

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=3e5+5;
 4 int a[2*N],n;
 5 int main(){
 6     scanf("%d",&n);
 7     for(int i=1;i<=n;i++)
 8      scanf("%d",&a[i]),a[i+n]=a[i];
 9     int i=1,j=2,k;
10     while(i<=n&&j<=n){
11         for(k=0;a[i+k]==a[j+k]&&k<=n;k++);
12         if(a[i+k]>a[j+k])i+=k+1;
13         else j+=k+1;
14         if(i==j)i++;
15     }
16     int ans=min(i,j);
17     for(int i=0;i<n;i++)
18      printf("%d ",a[i+ans]); 
19     puts("");
20     return 0;
21 } 
Code
复制代码

 

posted @   Coder_cjh  阅读(110)  评论(0编辑  收藏  举报
编辑推荐:
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
阅读排行:
· dotnet 源代码生成器分析器入门
· Draw.io:你可能不知道的「白嫖级」图表绘制神器
· ASP.NET Core 模型验证消息的本地化新姿势
· 从零开始:基于 PyTorch 的图像分类模型
· 官方的 MCP C# SDK:csharp-sdk
点击右上角即可分享
微信分享提示