传送门

文章目录

  • 题意:
  • 思路:

题意:

给你个串sss,让后把它重复无限次得到ttt,定义前缀的价值为cnt0−cnt1cnt_0-cnt_1cnt0​−cnt1​,求ttt的前缀价值为xxx的前缀个数,若有无限多输出−1-1−1。

思路:

定义pre[i]pre[i]pre[i]为前iii个字符的价值。
如果pre[n]=0pre[n]=0pre[n]=0,那么说明每个串都独立,如果至少一个pre[i]=xpre[i]=xpre[i]=x,那么说明他是有无限个,输出−1-1−1,否则就不存在输出000姐即可。
如果pre[n]!=0pre[n]!=0pre[n]!=0,那说明我们可以以pre[n]pre[n]pre[n]为基底,将xxx缩小p∗pre[n]p*pre[n]p∗pre[n],让后再加上某一个前缀pre[i]pre[i]pre[i],即p∗pre[n]+pre[i]=xp*pre[n]+pre[i]=xp∗pre[n]+pre[i]=x,转化一下p=x−pre[i]pre[n]p=\frac{x-pre[i]}{pre[n]}p=pre[n]x−pre[i]​,也就是当(x−pre[i])modpre[n]=0(x-pre[i])\bmod pre[n]=0(x−pre[i])modpre[n]=0的时候贡献加一,需要注意(x−pre[i])(x-pre[i])(x−pre[i])与pre[n]pre[n]pre[n]需要同号,最后特判一下x=0x=0x=0的情况就好啦。

//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,x;
char s[N];int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);int _; scanf("%d",&_);while(_--){scanf("%d%d%s",&n,&x,s+1);int sum=0,flag=0;for(int i=1;i<=n;i++){sum+=s[i]=='0';sum-=s[i]=='1';if(sum==x) flag=1;}if(sum==0) { if(flag) puts("-1"); else puts("0"); continue; }int ans=0,pre=0;for(int i=1;i<=n;i++){pre+=s[i]=='0';pre-=s[i]=='1';if(1ll*sum*(x-pre)>=0&&(x-pre)%sum==0)ans++;}printf("%d\n",ans+(x==0));}return 0;
}
/**/

Educational Codeforces Round 81 (Rated for Div. 2) B. Infinite Prefixes 数学相关推荐

  1. Educational Codeforces Round 84 (Rated for Div. 2) D. Infinite Path 构建环 + 思维

    传送门 文章目录 题意: 思路: 题意: 懒得写了,直接贴图了. 思路: 遇事不决画成图,考虑将iii向p[i]p[i]p[i]连一个边,可以发现每个点入度为111,出度为111,所以画出来是若干个环 ...

  2. Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp

    cf传送门 P3643 [APIO2016]划艇 文章目录 题意: 思路: 题意: aia_iai​在[li,ri][l_i,r_i][li​,ri​]等概率随机选一个数,求aaa数组不增的概率. 思 ...

  3. Educational Codeforces Round 81 (Rated for Div. 2) C. Obtain The String 序列自动机

    传送门 文章目录 题意: 思路: 题意: 给你两个串s,ts,ts,t,每次可以取sss串的一个子序列,问你最少取多少次子序列,将这些子序列拼起来能得到ttt. 思路: 发现我题解里面没写过序列自动机 ...

  4. Educational Codeforces Round 81 (Rated for Div. 2) E. Permutation Separation 线段树 + dp

    传送门 文章目录 题意: 思路: 题意: 给你一个打乱的排列,每个位置都各有一个价值,让你选择一个分界点,分成p1,p2,...,prp_1,p_2,...,p_rp1​,p2​,...,pr​和pr ...

  5. Educational Codeforces Round 81 (Rated for Div. 2) D. Same GCDs 欧拉函数\莫比乌斯

    传送门 文章目录 题意: 思路: 题意: 给定a,ma,ma,m,求满足gcd(a,m)=gcd(a+x,m)gcd(a,m)=gcd(a+x,m)gcd(a,m)=gcd(a+x,m)的xxx的个数 ...

  6. Educational Codeforces Round 81 (Rated for Div. 2)

    A题: 我们贪心按照位数大的拼就可以了. #include <bits/stdc++.h> using namespace std; int t,n; int main() {scanf( ...

  7. Educational Codeforces Round 77 (Rated for Div. 2) C. Infinite Fence 数论

    传送门 文章目录 题意: 思路: 题意: 思路: 碰到这样的题肯定是先写几个找找规律了,随便写几个就可以发现是以lcm(a,b)lcm(a,b)lcm(a,b)为一个循环,所以我们只需要在一个周期lc ...

  8. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  9. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

最新文章

  1. linux对文件的描述,对Linux文件系统的简单理解
  2. java外观设计修改_Java设计模式之外观模式和装饰器模式的设计(精选)
  3. java --String类解决面试问题
  4. Java实现文件复制的四种方式
  5. Spring-Spring 开发环境搭建及HelloSpring
  6. Acwing 第 1 场热身赛 【完结】
  7. 【Java】14 JDBC编程学习总结
  8. “约见”面试官系列之常见面试题之第五十九篇之js中push(),pop(),unshift(),shift()的用法小结 (建议收藏)
  9. IDEA这样配置注释模板,让你高出一个逼格!!
  10. H3C 典型数据链路层标准
  11. 如何让路由器摆脱安全困扰
  12. java.lang.InternalError: internal error: SHA-1 not available.
  13. 使用FlashBoot3.2c 将 U 盘制作成 DOS 启动盘
  14. 读取ZIP文件时ZipEntry的size为-1的解决办法
  15. MOOC 课后讨论5.2 判别是否是前缀码的算法
  16. 导致 Scan VIP 和 Scan Listener(监听程序)出现故障的最常见的 5 个问题 (文档 ID 1602038.1)
  17. 微信小程序真机提示error occurs:ENOENT: no such file or directory, access
  18. Android项目工程结构介绍
  19. 美标/国标耳机接口区别
  20. 2022新JI卫云域名防红/防封程序源码+已去除授权

热门文章

  1. 等我敲完这行代码,就和你离婚!
  2. 老板啥都懂,还天天套路我?!
  3. 表3.5 文章管理测试用例表_本地管理表空间管理机制
  4. 计算机 运行命令,教你电脑运行命令
  5. 有必要服务器虚拟化吗,服务器虚拟化有必要吗
  6. java地图 热力图,腾讯地图数据可视化之热力图
  7. c语言 if 多个判断条件执行顺序_C语言之流程控制选择语句
  8. 后端学习 - SpringBoot
  9. leetcode509. 斐波那契数
  10. [汇编语言]实验二:字的传送