A.Lucky Conversion

题意

  • 给定两个长度为 \(N(N \le 10^5)\) 且由4和7构成的 \(a, b\)串
  • 对 \(a\) 可以有两种操作:
  1. 交换两个位置的字符;
  2. 改变一个位置的字符。
  • 求最少到操作次数,使得两串相同。

思路

  • 统计需要改变4的个数和改变7的个数。
  • 两个数到最小值表示两两交换使得对应位相同,剩下的只有其中一种,再进行操作2使得对应位相同。
  • 也就是取两者最大值即答案。

B. Lucky Number 2

题意

  • 用 \(cnt(x)\) 表示串 \(x\) 在一个串 \(s\) 中出现到次数。
  • 现给出 \(cnt(4), cnt(7), cnt(47), cnt(74)\),求满足这些条件的最小的串 \(s\),串 \(s\) 仅包含4和7。

思路

  • 47和74只出现在4、7交界处,即如果我们把连续的4和连续的7看成4和7,则最后的串到形式为4、7交替出现,例如……47474……。
  • 显然,47和74的个数差值不会超过1。
  • 那么只要根据47和74的3种差值构造,多余的4插到前面,7则放到后面。

C. Lucky Subsequence

题意

  • 给定 \(N(N \le 10^5)\) 个数 \(a_i(1 \le a_i \le 10^9)\) ,其中仅由4、7构成的数是幸运数。
  • 求出长度为 \(K\) 的子序列,满足序列中没有相同的幸运数的方案数,结果对 \(10^9 + 7\) 取模。
  • 只要序列选取到位置不同,则认为两种方案不同。

思路

  • 在 \(10^9\) 范围内幸运数的个数就1000个左右。
  • 用 \(f(i,j)\) 表示前 \(i\) 种幸运数中取 \(j\) 种放入集合中的权值积之和,转移: \[f(i,j) = f(i - 1, j) + c_i f(i - 1, j - 1) \] \(c_i\) 表示第 \(i\)种幸运数出现的次数。
  • 假设取了 \(j\) 个幸运数,则从非幸运数集合中取 \(K - j\) 个放入集合即可。

D. Lucky Pair

题意

  • 给一个长为 \(N(N \le 10^5)\) 的序列。
  • 其中幸运数的个数不超过 \(10^3\) 。
  • 求 \([l_1,r_1]\) 和 \([l_2, r_2]\) 的对数,满足 \(l_1 \le r_1 \lt l_2 \le r_2\),且两个区间没有幸运数的交集,就是对于每种幸运数最多只能出现在一个区间中。

思路

  • 可以用总方案数 \(-\) 不合法的方案数。
  • 总方案数 = \(\binom{N}{4} + 2\binom{N}{3} + \binom{N}{2}\)
  • 假设已经得到了左区间 \([l_1, r_1]\) ,那么右半部分 \((r_1, n]\) 会被lucky number分割成若干的区间,使得这些小区间不包含lucky number。
  • 先固定左区间的右端点 \(r_1\),然后从大到小枚举左端点 \(l_1\) ,右半部分 \((r_1, n]\) 区间会发生变化,当且仅当 \(l_1\) 是lucky number并且在 \((l_1, r_1]\) 未出现,所以我们只要枚举lucky number的位置即可。
  • 考虑右半部分新增的分割点,假设为 \(p\) ,\(pre\)表示 \(p\) 的前一个分割点,\(nxt\)为后一个。那么新增的不合法右区间为包含 \(p\) 的且不包含\(pre,nxt\)的区间。
  • 由于有非lucky number的存在,所以还要考虑左右端点不是lucky number的扩展。

E. Lucky Queries

题意

  • 给一个长为 \(N(N \le 10^6)\) 且由4、7构成的串 \(s\) 。
  • 有 \(M(M \le 3 \times 10^5)\) 次操作:
  1. switch l r:将区间 \([l, r]\) 的 \(4 \to 7, 7 \to 4\) 。
  2. count:求串s的最长上升子序列。

思路

  • 将4看成0, 7看成1
  • 线段树维护区间0的个数 \(c_0\), 1的个数 \(c_1\), 最长上升子序列长度 \(lis\), 下降 \(lds\)。

Codeforces Round #104 (Div. 1)的更多相关文章

  1. Codeforces Round #456 (Div. 2)

    Codeforces Round #456 (Div. 2) A. Tricky Alchemy 题目描述:要制作三种球:黄.绿.蓝,一个黄球需要两个黄色水晶,一个绿球需要一个黄色水晶和一个蓝色水晶, ...

  2. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  3. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  4. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  5. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  6. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  7. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  8. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  9. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

随机推荐

  1. Spring中的Jdbc事务管理

    Spring提供了对事务的声明式事务管理,只需要在配置文件中做一些配置,即可把操作纳入到事务管理当中,解除了和代码的耦合. Spring声明式事务管理,核心实现就是基于Aop. Spring声明式事务 ...

  2. java获取页面编码

    文章出自:http://babyjoycry.javaeye.com/blog/587527 在此感谢原作者...\(^o^)/~   最近研究抓取网页内容,发现要获取页面的编码格式,Java没有现成 ...

  3. C++指针详解(二)

    指针是C/C++编程中的重要概念之一,也是最容易产生困惑并导致程序出错的问题之一.利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯:指针能 ...

  4. 记录一些容易忘记的属性 -- UIButton

    //设置按钮文字字体(这个只在自定义button时有效)    btn1.titleLabel.font = [UIFont systemFontOfSize:30]; showsTouchWhenH ...

  5. struts2的返回类型

    return 一个字符串,如果是success 直接 服务器端跳转 返回到和方法名对应的页面去 不过如果返回的页面和方法没有太大关系,比如删除修改添加之后要 客户端跳转 返回所有用户列表,这个时候可以 ...

  6. 重拾java系列一java基础(1)

    前言,不知不觉,从接触java到工作至今已有两年的时间,突然感觉自己的基础知识还很薄弱,有些知识虽然知道,但是停留在表面上,没有深挖,或者实践过,感觉掌握的很肤浅,而且时间一长,就觉得忘记了,我觉得这 ...

  7. hdu 2028

    PS:以前对long long型的数据就一直不怎么明白...弄了好久... long long a; scanf("%lld",&a); printf("%lld ...

  8. linux下解决端口被占用的问题

    以端口9877为例,先查看是否有进程占用该端口 netstat -tln | grep 9877 然后查看占用该端口的进程的进程id lsof -i :9877 最后kill 命令结束该进程: kil ...

  9. 输入任意IP,将IP转化为minion-IP格式(saltstack)

    注1:10.102. 可以替换成其他的,或者手动输入. 注2:minion-可以替换为其他的,或者手动输入. 代码如下(python3): import re # list = [] list1 = ...

  10. __set()与__get() 魔术方法

    在面向对象编程的过程中,对于类当中的各个成员变量,都有不同的访问属性,比如公有的(public)属性,在类内部和类外部都可直接调用:而私有的(private)和受保护的(protected),在类外不 ...