原题传送:http://acm.hdu.edu.cn/showproblem.php?pid=3474

  单调队列。

  这题的模型可以这样描述:给一个只由1和-1组成的循环序列,求以每个点为起点且长度最长为n的子串的最小值。到这一步,应该能想到单调队列的解法了。

View Code

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 #define N 2000005
 5
 6 int sum[N], a[N], q[N], n, ok1[N], ok2[N];
 7
 8 void cal(int ok[])
 9 {
10     int i, head, tail, t = 2 * n;
11
12     for(i = 1; i <= t; i ++)
13         sum[i] = sum[i - 1] + a[i];
14
15     for(head = tail = 0, i = 1; i < n; i ++)
16     {
17         while(head < tail && sum[i] <= sum[q[tail - 1]])
18             tail --;
19         q[tail++] = i;
20     }
21
22     for(i = n; i <= t; i ++)  // 这里i是区间右端点
23     {
24         while(head < tail && q[head] < i - n + 1)
25             head++;
26         while(head < tail && sum[i] <= sum[q[tail - 1]])
27             tail--;
28         q[tail++] = i;
29
30         ok[i - n] = (sum[q[head]] - sum[i - n] >= 0);
31     }
32 }
33
34 int main()
35 {
36     int t, i, ans, cas;
37     char c;
38     scanf("%d\n", &t);
39     for(cas = 1; cas <= t; cas ++)
40     {
41         for(n = 0; (c = getchar()) != '\n';)
42             a[++n] = (c == 'C' ? 1 : -1);
43
44         for(i = 1; i <= n; i ++)
45             a[n + i] = a[i];
46
47         cal(ok1);
48
49         std::reverse(a + 1, a + 2 * n + 1);   // 算另一个方向
50         cal(ok2);
51
52         for(ans = 0, i = 1; i <= n; i ++)
53             ans += ok1[i] | ok2[n - i];
54         printf("Case %d: %d\n", cas, ans);
55     }
56     return 0;
57 }

转载于:https://www.cnblogs.com/huangfeihome/archive/2012/10/17/2728501.html

HDU3474 Necklace相关推荐

  1. HDU 5727 Necklace

    题目:Necklace 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5727 题意:要用n个阳石和n个阴石来串一个项链(环状),规定阳石旁边只能是阴石,阴 ...

  2. HDU 5730 Shell Necklace(生成函数 多项式求逆)

    Shell Necklace 由题意可得f[n]=∑i=1na[i]f[n−i]f[n] = \sum\limits_{i = 1} ^{n} a[i] f[n - i]f[n]=i=1∑n​a[i] ...

  3. CF1361C. Johnny and Megan‘s Necklace(构造,欧拉回路,传递闭包)

    CF1361C. Johnny and Megan's Necklace Solution 真duliu,快做吐了... 刚开始想了一个假做法(但前面还是很真的). 假的做法大概是你发现这个东西具有传 ...

  4. UVa10054 The Necklace 欧拉回路

    如果图G中的一个路径包括每个边恰好一次,则路径称为欧拉路径. 如果一个回路是欧拉路径,则称为欧拉回路.(即起点终点相同的欧拉路) 有欧拉回路的称为欧拉图,有欧拉路径但无欧拉回路的称为半欧拉图. 无向图 ...

  5. Happy Necklace

    happy necklace 题意:一个项链是由红蓝两个珠子构成,项链不是环,是一条线,要求每一个素数长度红色珠子的个数大于等于蓝色珠子的个数,给你n个珠子问符合条件的项链的个数. 思路:一看取模就知 ...

  6. HDU 5730 Shell Necklace

    HDU 5730 Shell Necklace 原题连接: http://acm.hdu.edu.cn/showproblem.php?pid=5730 闻题而来. 设组合成长度为 k k的方案数量为 ...

  7. Accepted Necklace HDU - 2660

    Accepted Necklace HDU - 2660 WA wa了两发又双叒叕是因为没读清楚题我裂开 AC代码 好家伙一手最low的dp竟然过了,我还一直不敢交hhhh #include < ...

  8. HDU-2660 Accepted Necklace

    GDUT 2020寒假训练 专题一 D 原题链接 HDU-2660 Accepted Necklace GDUT-专题1-D BFS/DFS 题目大意 有N个石头想要从中选出K个做成项链,每颗石头有自 ...

  9. USACO Section 1.2 Broken Necklace

    题目 题目分析 推的过程 需要避免的坑 整体代码 USACO的题解 题目 题目描述 输入描述 Line 1: N, the number of beads Line 2: a string of N ...

最新文章

  1. iOS 视频捕获系列Swift之AVFoundation(一)
  2. 从一个提问引发到你是怎么看待编程语言是一种工具这句话的?【笔记自用】
  3. 一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)
  4. lock和wait+signal
  5. 【渝粤教育】 国家开放大学2020年春季 1108钢结构(本) 参考试题
  6. 【java8新特性】——Optional详解(三)
  7. 锻炼编程逻辑_通过锻炼提高编程技巧
  8. 【BZOJ1815BZOJ1488】有色图图的同构,Polya计数+暴力
  9. Eigen教程(6)之高级初始化方法
  10. OSChina 周二乱弹 —— 这样成功要到小护士姐姐的微信
  11. 从零实现深度学习框架——逻辑回归简介
  12. 超级简单:如何列出目录下所有文件的超链接
  13. php 61850,基于IEC61850智能电子设备(IED)系统解决方案.PDF
  14. 如何在计算机安装WPS,windowsxp系统电脑怎样安装wps插件
  15. Eclipse下载安装配置测试(超详细)
  16. 电脑公司Windows7_X86旗舰版V0911
  17. PS制作橙子鱼缸、折纸效果字
  18. Android查看手机sqlite数据库(可视化)
  19. 关于程序员的问题,我是看大佬说的不是我说的。
  20. JS 封装一个判断闰年平年的方法 aa(nian)

热门文章

  1. 解决Docker上安装RabbitMQ后Web管理页面打不开的问题
  2. IO流——流的分类、InputStream、OutputStream、Reader、Writer等
  3. tensorflow笔记:模型的保存与训练过程可视化
  4. android shell hello world,Android Framework 之HelloWorld(三)
  5. JZOJ 5234. 【NOIP2017模拟8.7A组】外星人的路径
  6. C# 调用C++写的dll的实现方法
  7. C#、C++、JAVA中虚函数和抽象函数的概念对比
  8. map怎么转化dto_java实现Object和Map之间的转换3种方式
  9. [转载]关于申请国外博后的一点经验和想法
  10. 分子计算机已经问世,纳米计算机指日可待?