链接: https://www.nowcoder.com/acm/contest/107/E
来源:牛客网

题目描述

众所周知,Xieldy最常用的口令是******。
为了改变这一现状,他random了一个01串,并从中截取了一段作为自己的口令。
他选择的口令满足以下条件:
1. 口令串表示的二进制数在十进制下可以被表示为3k(k>=0)。
2. 口令串可以有前导零。
现已经random出了01串,他想知道有多少种口令方案可以选择(不同的子段即为不同)。

输入描述:

若干组数据,每组数据仅一行01串s,表示random出来的的串,|s|<=1e6。

输出描述:

输出口令的方案数。
示例1

输入

101010

输出

5

解法一:

枚举所有子串,计算子串的十进制数,超时

/*
s.substr(pos,n);
在s中,从pos开始截取n个字符长度的子串
*/
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
#include<set>
#include<cmath>
#include<map>
using namespace std;
int check(string s)
{int l=s.length(),num=0,p=l-1;for(int i=0;i<l;i++){if(s[i]=='1')num+=pow(2,p);p--;}return num;
}int main()
{ios::sync_with_stdio(false);string s;while(cin>>s){int l=s.length();int ans=0,num;map<string,int> m;m.clear();for(int i=0;i<l;i++){for(int j=1;j<=l-i;j++){string t=s.substr(i,j);if(m[t]==0){num=check(t);}else num=m[t];             if(num==0||num%3==0)ans++;//cout<<t<<" "<<num<<endl;}       }cout<<ans<<endl;}return 0;} 

解法二:

大神的动态规划,不懂,运行时间:95ms

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e6+5;
char s[N];
int dp[N][3];
int main()
{while(scanf("%s",s)!=EOF){int len=strlen(s);ll ans=0;memset(dp,0,sizeof(dp));for(int i=0;i<len;i++){if(s[i]=='0'){dp[i][0]=1;dp[i][0]+=dp[i-1][0];dp[i][1]+=dp[i-1][2];dp[i][2]+=dp[i-1][1];}else{dp[i][1]=1;dp[i][0]+=dp[i-1][1];dp[i][1]+=dp[i-1][0];dp[i][2]+=dp[i-1][2];}ans+=dp[i][0];}printf("%lld\n",ans);}return 0;
}

解法三:

深度优化的动态规划,运行时间:32ms

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e6+5;
char s[N];
int main()
{while(scanf("%s",s)!=EOF){int len=strlen(s);ll ans=0,cnt[3]={0};for(int i=0;i<len;i++){if(s[i]=='0'){swap(cnt[1],cnt[2]);cnt[0]++;}else{swap(cnt[0],cnt[1]);cnt[1]++;}ans+=cnt[0];}printf("%lld\n",ans);}return 0;
}

西安电子科技大学第16届程序设计竞赛 E题相关推荐

  1. 西安电子科技大学第16届程序设计竞赛G题

    链接: https://www.nowcoder.com/acm/contest/107/G 来源:牛客网 题目描述 众所周知,汀老师是XDUACM实验室最优秀的人,无论是学习还是打游戏.今天他突然想 ...

  2. 西安电子科技大学第16届程序设计竞赛 F题

    链接: https://www.nowcoder.com/acm/contest/107/F 来源:牛客网 题目描述 在学习Operating System的过程中,Glory遇到了这样一个问题,现在 ...

  3. 西安电子科技大学第16届程序设计竞赛 C题

    链接:https://www.nowcoder.com/acm/contest/107/C 来源:牛客网 题目描述 Arch0n老师is a rich man, 他靠自己的才华和智商年纪轻轻就赚了不少 ...

  4. 北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛(重现赛)题解

    题目链接: 北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛(重现赛)_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ大学ACM校赛新生赛是面向ACM/ICPC/CCP ...

  5. 北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛题解

    北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛题解 A lzh的蹦床 B 所谓过河 C 旅行家问题1 D 旅行家问题2 E 小菲和Fib数列 F 好玩的音乐游戏 G ranko的手表 H 字母收集 ...

  6. 大学计算机西安电子科技大学答案,计算机网络技术与应用课后题答案(西安电子科技大学)...

    计算机网络技术与应用课后题答案(西安电子科技大学) <计算机网络应用基础>试题(1) 一.填空题(每空1分,共24分,答案写在横线上) 1.按逻辑组成划分,计算机网络是由和两部分组成的. ...

  7. 哈尔滨理工大学第12届程序设计竞赛--ADK题

    A割韭菜--线段树 题目链接: A-割韭菜_哈尔滨理工大学第12届程序设计竞赛(同步赛) (nowcoder.com) #include <bits/stdc++.h>using name ...

  8. 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解

    链接:https://www.nowcoder.com/acm/contest/118/A 来源:牛客网 PUBG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  9. 西安电子科技大学c语言答案,西安电子科技大学2021春 面向对象程序设计(C++)大作业答案...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一.简答题(共 10 分) 1.(3 分)什么是引用?它与指针有什么区别? 2.(3 分)C++提供了哪些循环语句?它们各自的特点是什么? 3.(4 分) ...

最新文章

  1. C#仿QQ皮肤-主窗体MainForm和Main的实现
  2. 【译】Introducing scrcpy
  3. Three.js学习笔记
  4. 企业参加HVV的防守思路总结
  5. win7一直显示正在启动_win7系统中提高启动速度并且禁用某些软件启动的操作小技巧...
  6. Spark学习-SparkSQL--04-SparkSQL CLI 单节点运行与yarn集群运行
  7. VB.net取整和模操作
  8. 一个超好玩的音乐网站源码 类似小游戏
  9. indesign安装包.exe 自动简繁互转for_adobe Indesign (ID)插件集打包下载
  10. 微信小程序各种弹窗操作
  11. 我的团长我的团第十七集
  12. html excel 2位小数,excel保留两位小数_excel用公式保留2位小数的方法
  13. python文件转换为pyd
  14. idea中找到VM options选项
  15. python弹性碰撞次数圆周率_碰撞出来的圆周率(一)
  16. BIM轻量化技术解析
  17. turtle实例8 玫瑰曲线
  18. RFID读卡器增量更新思路与代码实现
  19. 【奶妈级教程】Ubuntu18.04服务器远程连接指南
  20. OSChina 周日乱弹 ——病毒,你对程序员的原力一无所知!

热门文章

  1. 【MySql】mysql-5.7.20-winx64安装配置
  2. 微信公众号支付调用chooseWXPay提示“errmsg choosewxpay fail”
  3. 结对-结对编项目贪吃蛇-设计文档
  4. web 表单,脚本验证
  5. AutoIT 实现Firefox下载
  6. HDUOJ---2112HDU Today
  7. 对mysql explain讲的比较清楚的
  8. 产品所有者也应该是Scrum教练吗?
  9. DotNetNuke与MemberShip的结合(五年版) 三步汇总
  10. php回调函数求1+2+3+...+100的值_PHP全栈学习笔记6