题意 :

  • 让我们构造一个长度为n的只包含’b’和‘r’的字符串,要求所构造的字符串的子序列满意的个数最多
  • 满意的定义:对于序列[l,r],其中’r’出现的个数是奇数,那么就是满意的
  • 按字典序输出前100个

思路 :

  • 找最大对数,肯定是全r最优,直接计算即可
  • 首先需要求[l,r][l,r][l,r]内‘r’的个数,可以想到前缀和
  • 我们定义数组g[N]g[N]g[N],g[i]g[i]g[i]表示字符串前i位里r出现的个数
  • 那么对于序列[l,r][l,r][l,r],r出现的个数就是g[r]−g[l−1]g[r] - g[l - 1]g[r]−g[l−1]
  • 只有g[r]g[r]g[r]和g[l−1]g[l - 1]g[l−1]的奇偶性不一致时,r出现的个数会是奇数,该字符串才满意
  • 设这些前缀和中有x个奇数,y个偶数,则满足x+y=nx+y=nx+y=n,且此时我们的答案就是x∗yx*yx∗y
  • 则由均值不等式x+y≥2xyx + y \geq 2\sqrt{xy}x+y≥2xy​得到xy≤(x+y2)2xy \leq (\frac{x+y}{2})^2xy≤(2x+y​)2,当且仅当x=y时取等号
  • 即x=y=n2x=y=\frac{n}{2}x=y=2n​时,答案最大
  • 因为只需要输出前100个,搜索即可
  • x*y为n+12∗n+22\frac{n+1}{2} * \frac{n+2}{2}2n+1​∗2n+2​,x和y分别不能超过n+22\frac {n+2}{2}2n+2​
  • dfs传入四个参数,当前字符串的第i位,当前字符串的前缀和为奇数的个数,为偶数的个数,前i-1位r的个数
  • dfs时首先判断已经输出字符串的个数和前缀和分别为奇数偶数的个数
  • 然后是判断当前这位是否已经第n位
  • 再根据前i-1位r的个数分别dfs
  • 观察样例1,n=1时,输出"r",第0位以前的‘r’的个数的前缀和是0,偶数,因此dfs第一次传入参数在第二个位置应为1
  • 字典序最小表现在每次dfs都是先放b后放r的
  • 注意要开long long,因为输出个数时溢出了
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#define debug(a) cout << #a << " = " << a << endl;
#define x first
#define y second
using namespace std;
typedef long long ll;const int N = 1e5 + 10;ll n;
ll out;
ll cnt = 0;
char s[N];// 字符串中第i位,前缀和偶数个数,前缀和奇数个数,字符串前i-1位r的个数
void dfs(ll i, ll even, ll odd, ll last)
{// 输出100个,或者奇数或偶数数量超限if (cnt >= 100 || even > out || odd > out)return ;// 一个字符串完成if (i == n){cnt ++ ;cout << s << endl;return ;}if (last % 2 == 0)  // 字符串前i-1位r的个数是偶数{s[i] = 'b';dfs(i + 1, even + 1, odd, last);    // 在第i位放'b',前缀和为偶数的个数加一,为奇数的个数不变s[i] = 'r';dfs(i + 1, even, odd + 1, last + 1);}else                // 字符串前i-1位r的个数是奇数{s[i] = 'b';dfs(i + 1, even, odd + 1, last);s[i] = 'r';dfs(i + 1, even + 1, odd, last + 1);}
}int main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin >> n;cout << ((n + 1) / 2) * ((n + 2) / 2) << endl;// LL ans = 1;//  LL tmp = 1;//  for(int i = 2; i <= n; i ++ )//  {//     if(i % 2) tmp ++;//       ans += tmp;// }// m = (n + 2) / 2;//    cout << ans << endl;out = (n + 2) / 2;dfs(0, 1, 0, 0);return 0;
}

Journey to Un‘Goro 贪心,找规律,搜索(沈阳)相关推荐

  1. codeup 1128: 出租车费 贪心|找规律

    1128: 出租车费 时间限制: 1 Sec 内存限制: 32 MB 提交: 871 解决: 299 [提交][状态][讨论版][命题人:外部导入] 题目描述 某市出租车计价规则如下:起步4公里10元 ...

  2. 2021 ICPC 沈阳站 D题 Journey to Un‘Goro (打表+找规律)

    2021 ICPC 沈阳站 D.Journey to Un'Goro [链接][http://codeforces.com/gym/103202/problem/D](http://codeforce ...

  3. 【HDU - 5881】Tea(思维,找规律)

    题干: Tea is good. Tea is life. Tea is everything. The balance of tea is a journey of pursuing balance ...

  4. 用计算机寻找规律,用计算器找规律练习题

    <用计算器找规律练习题>由会员分享,可在线阅读,更多相关<用计算器找规律练习题(6页珍藏版)>请在人人文库网上搜索. 1.一.999911 999912 999913 9999 ...

  5. 【每日一题Day35】LC878第N个神奇数字 | 二分查找 找规律 + 数学

    第N个神奇数字[LC878] 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7 ...

  6. 1235813找规律第100个数_2018年中考数学规律探索题(中考找规律题目-有答案)

    <2018年中考数学规律探索题(中考找规律题目-有答案)>由会员分享,可在线阅读,更多相关<2018年中考数学规律探索题(中考找规律题目-有答案)(16页珍藏版)>请在金锄头文 ...

  7. 思维、找规律题目汇总

    转自:http://hi.baidu.com/liuzhe/blog/item/d2dc0fd10bf1eadb572c843d.html 感想: 1.还是数学有前途 2.猜想很重要 3.暴力打表可以 ...

  8. 2018.09.01 poj3071Football(概率dp+二进制找规律)

    传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...

  9. 点分治问题 ----------- P3727 曼哈顿计划E[点分治+博弈SG函数打表找规律]

    题目链接 解题思路: 1.首先对于每个操作我们实际上是一个博弈问题 对于k=1的操作就是很基础的NIM游戏就是找到一条链的异或和为0 对于k=2的操作通过达打表找规律: 如果s是奇数那么偶数的SG函数 ...

最新文章

  1. Java基础-Date类常用方法介绍
  2. 新版ffmpeg PCM编码到AAC,swr_convert转换采样精度,稍微修改兼容PCM编码为G711A及MP3,记录下。
  3. 用代码实现task列表里面的Assigned To选择多个人
  4. java 准备 解析_深入理解JAVA虚拟机学习笔记24——类加载的准备和解析
  5. [饭后算法系列] 数组中和非负的最长子数组
  6. c语言表达式运算符,C语言运算符与表达式
  7. C++ float、double判断是否等于0
  8. Zookeeper是什么
  9. matlab18a安装步骤,MATLAB R2018a图文安装教程
  10. 打造自己的linux桌面,一步一步打造你自己的Ubuntu 10.04桌面
  11. 《完全写作指南》晨读笔记
  12. 笔记本拆机后无法开机是什么原因
  13. 安卓python编辑器-10 个平板电脑上的 Python 编辑器
  14. linux小白家教学一
  15. win10鼠标右键一直转圈怎么解决 鼠标右键一直转圈
  16. 互联网推荐系统比较研究
  17. 平面设计素材|黑白海报设计,暗黑潮流
  18. 流量分类方法设计(一)——参考论文整理
  19. Julia中从Git时出现超时问题的解决方法---(例如:安装GR、Rmath一直超时)
  20. Yii2 中 checkboxlist 复选框 默认选中

热门文章

  1. PP模块: 最简单的混合生产方式
  2. 物料帐结算,库存差异为何在下月初冲回
  3. ALEIDoc EDI(4)--change point02
  4. SAP Client Copy 过程
  5. SAP ABAP OLE 输出数据到 Excel 无法自动保存的解决
  6. SAP中会计凭证和物料凭证的对应关系
  7. 对于ACCESS跨库的一些研究
  8. 除了收割票房,内战中的中国喜剧电影到底在拼什么?
  9. vue怎么截取时间年月_Vue + Element 获取标准时间、时间戳进行转换与操作(年月日)...
  10. excel随机抽取_Excel条件格式,扮靓你的报表