枚举+前缀和...
来源:互联网 发布:二代身份证相片 软件 编辑:程序博客网 时间:2024/04/30 18:45
给一个3*1e5的数字串,判断该串中有多少个子串%64==0,0也算,有前导0的不算
例如 64064
[64]064
64[0]64
640[64]
[640]64
[64064]
括号内即为符合条件的子串,064不符合
这题要利用1000000正好整除64,所以x*1000000+P(P的长度小于等于6)
只要P正好整除64,则整个串都整除64
所以
枚举串i: 1—len
暴力枚举j=i—i+5找i以及i的后5位,如果当前的数字num[i–j]整除64那么更新答案。
如果当前的s[i]为0,且 j ! = i,则只更新num不更新答案,因为此时有前导0
当循环判断完6位后,如果num%64==0,说明它可以与i-1前面的数字构成x*1000000+num,如果(i-1)—1有连续的0则剔除(避免前导0),这部分用前缀和处理…
BB了那么多感觉还是没说清楚=_=说到底还是自己太弱了啊啊啊啊
这题要点:1000000%64==0使得这题可以使用6*n的暴力枚举…
/*HUST 1599*/#include <bits/stdc++.h>using namespace std;typedef long long LL;char s[300009];int sum[300009];int main(){#ifdef LOCAL freopen("in.txt","r",stdin);#endif // LOCAL while(scanf("%s",s+1)>0) { memset(sum,0,sizeof(sum)); int len=strlen(s+1); for(int i=1;i<=len;i++) { if(s[i]=='0') sum[i]=sum[i-1]; else sum[i]=sum[i-1]+1; } int ans=0; for(int i=1;i<=len;i++) { int j,num=0; for(j=0;j<6&&i+j<=len;j++) { num=num*10+s[i+j]-'0'; if(j&&'0'==s[i]) continue; if(num%64==0) ans++; } if(j==6&&num%64==0) ans+=sum[i-1]; } printf("%d\n",ans); } return 0;}
0 0
- 枚举+前缀和...
- hdu 5163 前缀和+枚举
- 前缀和+枚举 Gym100712B Rock-Paper-Scissors
- CodeForces 731F VideoCards 前缀和+枚举
- SGU 148 枚举出奇迹 单调性以及前缀和
- UVa 1382 Distant Galaxy 解题报告(枚举 + 前缀和)
- [poj 2029]Get Many Persimmon Trees 前缀和+枚举
- SDUT 3254 Stars【二维前缀和+二分+暴力枚举】
- 前缀和,枚举+递推(Average,HDU 5353)
- Codeforces 828B Black Square【暴力枚举+二维前缀和】
- Codeforces 846 C Four Segments(前缀和+枚举)
- Codeforces 846C Four Segments【思维+预处理+前缀和枚举】
- HDU-4476 Cut the rope (枚举、前缀和)
- CF 376D. Maximum Submatrix 2 枚举+前缀和
- LuoguP1311[NOIP2011] 选择客栈 解题报告【前缀和+枚举(?)】
- codeforces877B(div2)Nikita and string 暴力枚举+前缀和
- 15nod1572-模拟&前缀和&枚举-宝岛地图
- 前缀和
- 教你玩转HelloWorld
- 关于MAC下mysql配置环境时丢失mysql.sock而自身无法生成问题的解决方案
- seo学习
- Hadoop笔记三之Hdfs体系架构及各节点之间的Rpc通信
- Android配置----Eclipse+BlueStacks调试Android应用
- 枚举+前缀和...
- 202. Happy Number --LeetCode Record
- Qt-观察者模式
- iOS Core Graphics手写板
- 欢迎使用CSDN-markdown编辑器
- Python打印print函数深入解析
- 两个下拉列表进行选项传递操作
- LintCode:链表划分
- js数组操作大全