><

直接写中文了

Problem Statement

给定的是长度为N-1的字符串S. S中的每个字符都是<或>。

当对所有i(1≤i≤N-1)都满足以下条件时,N个非负整数a1,a2,[cdots],aN的序列被认为是满足的

  • 如果Si = <:ai <ai + 1
  • 如果Si =>:ai> ai + 1

找出N个非负整数的良好序列的元素的最小可能和。

约束条件

  • 2≤N≤5×105
  • S是长度为N-1的字符串,由<和>组成

Input

输入来自标准输入,格式如下:

  1. S

Output

找出N个非负整数的良好序列的元素的最小可能和。

Sample Input 1

  1. <>>

Sample Output 1

  1. 3

a =(0,2,1,0)是一个好序列,其总和为3。没有一个好序列,其总和小于3

Sample Input 2

  1. <>>><<><<<<<>>><

Sample Output 2

  1. 28

题目链接:
https://vjudge.net/problem/AtCoder-5659

不难发现找到"<>"这个即可

"<>"左右两边的个数设为l,r;大的一个为maxn,小的一个为minn ,则两边的和为(maxn+1)/2*maxn+(minn+1)/2*minn-minn

"><"左右两边的个数设为l,r;两边的和为(l+1)/2*l+(r+1)/2*r

所以只要遍历一遍s即可,碰到"<>"另外讨论,其他情况假设有n个"<"或者">",则ans+=(n+1)/2*n;

AC代码

  1. #include <bits/stdc++.h>
  2. #define Mod 1000000007
  3. #define eps 1e-6
  4. #define ll long long
  5. #define INF 0x3f3f3f3f
  6. #define MEM(x, y) memset(x, y, sizeof(x))
  7. #define Maxn 1000000000000 + 10
  8. using namespace std;
  9. string s;
  10. ll len;
  11. ll ans;
  12. void solve(ll start, ll sum, ll flag) //搜索起始位置,上一次共有sum个连续的<或者>,上一次有没有出现<>
  13. {
  14. ll i;
  15. ll f = ;
  16. ll cnt = ; //计数
  17. char r = s[start];
  18. for (i = start + ; i < len; i++)
  19. {
  20. if (s[i] == r)
  21. cnt++;
  22. else
  23. {
  24. if (r == '<' && s[i] == '>') //存在<>,f=1
  25. f = ;
  26. break;
  27. }
  28. }
  29. if (flag == )
  30. {
  31. if (cnt > sum)
  32. {
  33. if (cnt > )
  34. {
  35. ans += (cnt + ) * cnt / ;
  36. ans -= sum;
  37. }
  38. else
  39. {
  40. ans += ;
  41. ans -= sum;
  42. }
  43. }
  44. else
  45. {
  46. if (cnt > )
  47. {
  48. ans += (cnt + ) * cnt / ;
  49. ans -= cnt;
  50. }
  51. else
  52. {
  53. ans += ;
  54. ans -= cnt;
  55. }
  56. }
  57. if (i >= len)//遍历完成
  58. return;
  59. return solve(i, cnt, f);
  60. }
  61. else
  62. {
  63. if (cnt > )
  64. ans += (cnt + ) * cnt / ;
  65. else
  66. {
  67. ans += ;
  68. }
  69. if (i >= len)//遍历完成
  70. return;
  71. return solve(i, cnt, f);
  72. }
  73. }
  74. int main()
  75. {
  76. ans = ;
  77. cin >> s;
  78. len = s.size();
  79. solve(, , );
  80. cout << ans << endl;
  81. }

【AtCoder - 5659 】>< (思维题)的更多相关文章

  1. Atcoder Grand Contest 001E - BBQ Hard(组合意义转化,思维题)

    Atcoder 题面传送门 & 洛谷题面传送门 Yet another 思维题-- 注意到此题 \(n\) 数据范围很大,但是 \(a_i,b_i\) 数据范围很小,这能给我们什么启发呢? 观 ...

  2. Atcoder Grand Contest 013 E - Placing Squares(组合意义转化+矩阵快速幂/代数推导,思维题)

    Atcoder 题面传送门 & 洛谷题面传送门 这是一道难度 Cu 的 AGC E,碰到这种思维题我只能说:not for me,thx 然鹅似乎 ycx 把题看错了? 首先这个平方与乘法比较 ...

  3. zoj 3778 Talented Chef(思维题)

    题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...

  4. cf A. Inna and Pink Pony(思维题)

    题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...

  5. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  6. 洛谷P4643 [国家集训队]阿狸和桃子的游戏(思维题+贪心)

    思维题,好题 把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了 正确性证明: 如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了 如果分别被两个人选了,一作差就抵消了,相当于谁都没有 ...

  7. C. Nice Garland Codeforces Round #535 (Div. 3) 思维题

    C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  8. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  9. UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)

    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...

  10. HDU 1029 Ignatius and the Princess IV / HYSBZ(BZOJ) 2456 mode(思维题,~~排序?~~)

    HDU 1029 Ignatius and the Princess IV (思维题,排序?) Description "OK, you are not too bad, em... But ...

随机推荐

  1. java架构之路-(面试篇)JVM虚拟机面试大全

    下文连接比较多啊,都是我过整理的博客,很多答案都在博客里有详细说明,理解记忆是最扎实的记忆.而且我的答案不一定是最准确的,但是我的答案不会让你失望,而且几乎每个答案都是问题的扩展答案. 1.JVM内存 ...

  2. servlet中的forward()和redirect()

    从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器 浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏 ...

  3. Unknown column 'user_id' in 'where clause'

    mapper位置报错Unknown column 'user_id' in 'where clause' 可能是数据库中的字段user_id包含空格

  4. mydumper 介绍及使用

    1 Mydumper 介绍 Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具. Mydumper主要特性: 轻量级C语言写的 多线程备份,备份后会生成多个备份文件 事务 ...

  5. 无人机基于Matlab/Simulink的模型开发(连载一)

    "一切可以被控制的对象,都需要被数学量化" 这是笔者从事多年研发工作得出的道理,无论是车辆控制,机器人控制,飞机控制,还是无人机控制,所有和机械运动相关的控制,如果不能被很好的数学 ...

  6. Redis之安装配置(Windows)

    下载 下载地址:https://github.com/MSOpenTech/redis/releases 解压,文件的名字重命名为redis. 打开文件夹,内容如下: 发送redis-server.e ...

  7. 决策树算法系列之一 ID3

    1 什么是决策树 通俗来说,决策树分类的思想类似于找对象 一个女孩的母亲要给这个女孩介绍男朋友 (分类问题.见或不见) 女孩有自己的一套标准 长相 收入 职业 见面与否 丑 高 某箭队经理 不见 中等 ...

  8. python自动化测试三部曲之request+django实现接口测试

    国庆期间准备写三篇博客,介绍和总结下接口测试,由于国庆期间带娃,没有按照计划完成,今天才完成第二篇,惭愧惭愧. 这里我第一篇博客的地址:https://www.cnblogs.com/bainianm ...

  9. Web渗透之mssql差异备份getshell

    简介 差异备份数据库得到webshell.在sql server 里dbo和sa权限都有备份数据库权限,我们可以把数据库备份称asp文件,这样我们就可以通过mssqlserver的备份数据库功能生成一 ...

  10. Python多线程多进程那些事儿看这篇就够了~~

    自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块 ...