Menci的序列
题目大意
一个长度为n的字符串s,只包含+和×。
选出一个子序列,然后你有一个ret,初始为0,按顺序扫你选出的这个子序列。
如果碰到的是+,ret+1,否则ret*2。
最大化ret%2^k。
首先可以注意到,每一个+对答案有2^c的贡献,c为该+后的×数量(因为遇到了×每次乘二)。
从这个结论推广开来,可以得到×+++=+×+这样一个性质(前者每个+的贡献为2^0=1,总和为3,后者第一个加号的贡献为2^1=2,第二个+的贡献为2^0=1,总和也为3)。
有了以上两种结论,我们可以把任意一个大于2的+序列从中抽取两个+,又前面的离他最近的一个×前添加一个+。循环多次,就可以使得每一个+序列的长度不超过2。
建立一个a[],a[i]表示后面×的数量为i的+有多少个,这样来存取每个+的贡献。依第三段的结论可以推出,a[i]<=2因此在二进制运算中,最多只能进一次位。
点击查看代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fd(i,a,b) for(i=a;i>=b;i--)
using namespace std;
const int maxn=1000000+10;
char s[maxn];
int a[maxn],ans[maxn];
int i,j,k,l,t,n,m,p;
int main(){
scanf("%d%d",&n,&k);
scanf("%s",s+1);
t=0;
fd(i,n,1)
if (s[i]=='*') t++;else a[t]++;
n+=10;
fo(i,0,n){
t=(a[i]-1)/2;
a[i]-=2*t;
a[i+1]+=t;
}//将多个加号组成的串转化成最多只有两个连续加号组成的串
p=k-1;
while (n>=0){
while (n>=0&&!a[n]) n--;
if (n<0) break;
if (n>=p) ans[p--]=1;
else{
fo(i,0,p-1){
t=a[i]/2;
a[i]-=2*t;
a[i+1]+=t;
}
fo(i,0,p) ans[i]=a[i];
break;
}
n--;
}
p=k-1;
while (p>=0&&!ans[p]) p--;
if (p>=0){
fd(i,p,0) printf("%d",ans[i]);
printf("\n");
}
else printf("0\n");
}
Menci的序列的更多相关文章
- B. Menci 的序列
题解: 首先subtask1直接状压暴力就好 subtask2我的处理和题解不太一样 仍然正向考虑 设i的时候有最高位为j,那么这个时候数一定越大越好(这个比较好yy) 然后$f[i][j]$搞个高精 ...
- 【夯实PHP基础】UML序列图总结
原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...
- Windows10-UWP中设备序列显示不同XAML的三种方式[3]
阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...
- 软件工程里的UML序列图的概念和总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...
- python序列,字典备忘
初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...
- BZOJ 1251: 序列终结者 [splay]
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3778 Solved: 1583[Submit][Status][Discu ...
- 最长不下降序列nlogn算法
显然n方算法在比赛中是没有什么用的(不会这么容易就过的),所以nlogn的算法尤为重要. 分析: 开2个数组,一个a记原数,f[k]表示长度为f的不下降子序列末尾元素的最小值,tot表示当前已知的最长 ...
- [LeetCode] Sequence Reconstruction 序列重建
Check whether the original sequence org can be uniquely reconstructed from the sequences in seqs. Th ...
- [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
随机推荐
- JS中的 && 、|| 、??、?. 运算符
javascript有不少好用的运算符,合理的使用可以大大提高工作效率,以下简单介绍了4种,具体如下: && 逻辑与运算(&&)是 AND 布尔操作.只有两个操作数都为 ...
- Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch64. path=/org/sqlite/native/Mac/aarch64
编译项目报错: Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch ...
- RestFul和控制器
RestFul和控制器 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. 在Spring MVC中 ...
- Spring 源码(12)Spring Bean 的创建过程(3)
继续上一篇Spring Bean的创建过程的解读,上一篇介绍了Spring在创建过程中doGetBean方法,在执行过程中会调用getSingleton方法并且设置一个lambda表达式,这个lamb ...
- .net 项目使用 JSON Schema
.net 项目使用 JSON Schema 最近公司要做配置项的改造,要把appsettings.json的内容放到数据库,经过分析还是用json的方式存储最为方便,项目改动性最小,这就牵扯到一个问题 ...
- AQS源码三视-JUC系列
AQS源码三视-JUC系列 前两篇文章介绍了AQS的核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量.为上层各式各样的同步器实现画好了模版,像已经介绍到的ReentrantL ...
- 重新认识 MSBuild - 1
前言 很多人一谈到 MSBuild,脑子里就会出现 "XML"."只能用 VS 的属性框图形界面操作"."可定制性和扩展性差" 和 &quo ...
- Spring Boot下Spring Batch入门实例
一.About Spring Batch是什么能干什么,网上一搜就有,但是就是没有入门实例,能找到的例子也都是2.0的,看文档都是英文无从下手~~~,使用当前最新的版本整合网络上找到的例子. 关于基础 ...
- linux篇-linux 主从配置
1准备两台服务器 一台是192.168.118.128 一台是192.168.118.129 2主服务器配置 192.168.118.128 修改my.cnf文件 server-id=1 log-bi ...
- Fail2ban 命令详解 fail2ban-regex
fail2ban-regex是fail2ban提供的用来测试正则表达式的一个小工具,我们可以用它来测试正则表达式是否能够匹配到日志文件中的要禁止的IP行. fail2ban-regex默认情况下自动匹 ...