水了好几下。

优化1:开始初始化的时候,如果左边那个也是最小值,那么此点就不用进队了。

优化2:如果队列里的位置,已经超过了后面位置的初始位置,那么后面这个位置也没用了。

 /*
ID: cuizhe
LANG: C++
TASK: hidden
*/
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
int que1[],que2[];
char str[];
int main()
{
int i,len,minz,num,tnum,temp;
char ch;
freopen("hidden.in","r",stdin);
freopen("hidden.out","w",stdout);
scanf("%d",&len);
for(i = ;i < len;)
{
scanf("%c",&ch);
if(ch != '\n')
str[i++] = ch;
}
for(i = len;i < *len;i ++)
{
str[i] = str[i-len];
}
minz = ;
num = ;
for(i = ;i < len;i ++)
{
if(minz > str[i]-'a')
{
num = ;
minz = str[i]-'a';
que1[num++] = i;
}
else if(minz == str[i]-'a')
{
if(i != &&str[i-]-'a' == minz)
continue;//优化1
que1[num++] = i;
}
}
for(temp = ;;temp ++)
{
if(num == ) break;
minz = ;
for(i = ;i < num;i ++)
{
if(minz > str[que1[i]+]-'a')
{
minz = str[que1[i]+]-'a';
tnum = ;
que2[tnum++] = que1[i]+;
}
else if(minz == str[que1[i]+]-'a')
{
if(que2[tnum-] >= que1[i]+ -temp)
continue;//优化2
que2[tnum++] = que1[i]+;
}
}
for(i = ;i < tnum;i ++)
que1[i] = que2[i];
num = tnum;
}
printf("%d\n",que1[]-temp);
return ;
}

最新文章

  1. 一个不错的php验证码的类
  2. jQ1.5中的事件系统(低版本的事件系统)
  3. curl请求的时候总是提示400
  4. docker-containerd 启动流程分析
  5. poj 1815 Friendship 字典序最小+最小割
  6. hdu 4411 最小费用流
  7. C++中delete[]是如何知道数组大小的
  8. RTB实时竞价广告是未来趋势
  9. spring-boot + Ehcache without XML
  10. [LeetCode] 3Sum 解题思路
  11. tomcat链接mysql时超时报错java.io.EOFException: Can not read response from server. Expected to read 4 bytes,
  12. LeetCode OJ 292.Nim Gam19. Remove Nth Node From End of List
  13. Linux服务器下对Oracle作Rman备份
  14. 【翻译】《向“弹跳球”演示程序添加新功能》 in MDN
  15. 测试客户端连接12c ASM实例
  16. WPF 将数据源绑定到TreeView控件出现界面卡死的情况
  17. lwip-动态内存管理
  18. vagrant up connection time out
  19. mac版win10装eclipse图标太小了,解决办法(2k显示屏+win10)
  20. kvm/qemu虚拟机桥接网络创建与配置

热门文章

  1. oracle限制ip訪問
  2. ASP.NET 5 Beta7发布
  3. Android之TabHost布局(转)
  4. 通信原理实践(一)&mdash;&mdash;音频信号处理
  5. 权限管理AppOpsManager
  6. FileSeek文件内容搜索工具下载
  7. 利用scp传输文件小结
  8. js的一些小笔记,(不定期更新)
  9. css学习(2)-- 常见的CSS属性和值
  10. vsftpd 创建虚拟用户