NYOJ B : CTX学长的01串
来源:互联网 发布:知乎的产品流程设计图 编辑:程序博客网 时间:2024/05/23 13:37
B : CTX学长的01串
题目描述
想AK,必须过了我这一关(偷笑)。
给你一个01字符串只包括字符0和1(例如:0101010101010011010)
现在CTX学长想要考考你们,这个01串中有多少的子序列。
子序列的定义是这样的,可以在01串中找一些字符(不能改变字符的顺序)组成一个新的串,
例如01,你可以找到的子序列是"0","1","01".
例如0110,你可以找到的子序列是"0","1","01","11","10","00","011","110","010","0110".
输入
输入一个T,有T组数据。(0<T<=100)
接来下有T行,每行输入一个01串,0<长度<=100000。
输出
输出01串中有多少个不同的子序列。答案太大,输出对1000000007取余之后的结果
样例输入
复制
410101110000000
样例输出
复制
3685
提示
第一个样例所包含的子序列为“0”,“1”,“10”。一共有3个子序列
第二个样例所包含的子序列为“0”,“1”,“01”,“10”,“11”,“101”。一共有6个子序列
第三个样例所包含的子序列为“0”,“1”,“00”,“10”,“11”,“100”,“110”,“1100”。一共有8个子序列
第四个样例所包含的子序列为“0”,“00”,“000”,“0000”,“00000”。一共有5个子序列.
这道题我还没做出来,就先放题解,我的代码等做出来了再放。
题解:
#include<bits/stdc++.h>using namespace std;const long long mod=1000000007;char s[110000];int main(){ int t; scanf("%d",&t); while(t--) { scanf("%s",s); int k=strlen(s); long long a=0,b=0,c=0,d=1; long long sum=0; for(int i=0;i<k;i++) { if(s[i]=='0') { a+=b; c+=d; d+=b; b=0; } else if(s[i]=='1') { a+=c; b+=d; d+=c; c=0; } a%=mod; b%=mod; c%=mod; d%=mod; } sum=(a+b+c+d-1)%mod; printf("%lld\n",sum); }}
阅读全文
0 0
- NYOJ B : CTX学长的01串
- CTX学长的01串
- NYOJ I : CTX学长的快速幂
- NYOJ J : CTX学长的找位置游戏
- CTX学长的快速幂
- CTX学长的找位置游戏
- CTX学长的找位置游戏(错排)
- CTX学长的快速幂(快速幂运用)
- NYOJ 1218 zkc学长的福利
- NYOJ 1218 zkc学长的福利
- NYOJ zkc学长的福利(贪心+高精度运算)
- ${ctx} 的那些事
- Netty中ctx.writeAndFlush与ctx.channel().writeAndFlush的区别
- 毕业学长的建议
- 学长出的题。。
- 学长的疑惑???
- 学长的训诫C++
- zkc学长的福利
- Android8.0广播使用
- A1046.Shortest Distance
- 4.Spark Streaming:实时wordcount程序开发
- python划分数列,生成新的数列,作为value值放入字典
- c++命名规则
- NYOJ B : CTX学长的01串
- PHP 7 连接MySQL,增删改查
- matlab启动
- Git学习-暂存区
- one or more listeners failed to start
- 区分break语句和continue语句
- 学习记录
- 关于数字证书的使用问题
- SQL Select语句完整的执行顺序