题目链接:点击查看

题目大意:给出一个由0或1组成的字符串s,用来构造出字符串 t =  s + s + s....+ s,字符串 t 由无限个 s 拼接而成。现在规定cnt_0 [ i ]和cnt_1 [ i ]分别为到第 i 位为止所出现的0和1的个数,给出一个 x ,问字符串 t 中有多少个前缀满足cnt_0 [ i ] - cnt_1 [ i ] == x,若有无限个答案,输出-1

题目分析:简单到不能在简单的数学题了,但是比赛的时候脑子瓦特了,一直处理不了细节,加上读题的时候就把心态读崩了,正所谓是半小时读题,一秒钟出正解,一小时debug,然后交上去1WA,心态直接炸裂,完成掉分

读完题后,第一反应应该是有一个公式的,因为字符串 t 是由字符串 s 无限循环而得到的,每次循环后都必定会有数字0和数字1差值积累的贡献,比如字符串101,每循环一次所积累的差值为 -1 ,循环100次积累的差值就是 -100 ,所以我们可以分为两类,一类是可以积累贡献的,另一类是不能积累贡献的(也就是0的个数和1的个数相同时),当然输出-1的情况显然在不能积累贡献的情况中,我们假设找到 x 时是在第 k 次循环,那么有公式:

k * ( cnt_0 [ n ] - cnt_1 [ n ] ) + ( cnt_0 [ i ] - cnt_1 [ i ] ) == x

移项处理得到:

k * ( cnt_0 [ n ] - cnt_1 [ n ] ) == x - ( cnt_0 [ i ] - cnt_1 [ i ] )

满足上述条件的 i 就是我们所要找的答案了,需要满足两个条件:

  1. 因为积累贡献的 k 是从 0 开始的,所以第一个条件为(x - ( cnt_0 [ i ] - cnt_1 [ i ] )) / ( cnt_0 [ n ] - cnt_1 [ n ] ) >=0
  2. 其次就是 (x - ( cnt_0 [ i ] - cnt_1 [ i ] )) % ( cnt_0 [ n ] - cnt_1 [ n ] ) == 0

当然众所周知 0 不能作为除数出现,所以要分类讨论一下( cnt_0 [ n ] - cnt_1 [ n ] ) == 0时的情况,也就是不能积累贡献的情况,还有空串的情况也需要特判

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int cnt[N];char s[N];int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n,x;scanf("%d%d%s",&n,&x,s+1);for(int i=1;i<=n;i++){cnt[i]=cnt[i-1];if(s[i]=='0')cnt[i]++;elsecnt[i]--;}int ans=0;if(x==0)//特判空串 ans++;for(int i=1;i<=n;i++){if(cnt[n]==0)//每次循环贡献为0 {if(cnt[i]==x)ans++;}else//每次循环都有贡献 {if((x-cnt[i])%cnt[n]==0&&(x-cnt[i])/cnt[n]>=0)ans++;} }if(cnt[n]==0&&ans)//特判无限ans=-1;printf("%d\n",ans);}return 0;
}

CodeForces - 1295B Infinite Prefixes(数学)相关推荐

  1. Educational Codeforces Round 81 (Rated for Div. 2) B. Infinite Prefixes 数学

    传送门 文章目录 题意: 思路: 题意: 给你个串sss,让后把它重复无限次得到ttt,定义前缀的价值为cnt0−cnt1cnt_0-cnt_1cnt0​−cnt1​,求ttt的前缀价值为xxx的前缀 ...

  2. B. Infinite Prefixes

    链接:https://codeforces.com/contest/1295/problem/B You are given string ss of length nn consisting of  ...

  3. Codeforces1600数学day5[找规律CodeForces - 1059C,贪心数学A - Banh-mi CodeForces - 1062C ]

    A - Banh-mi CodeForces - 1062C 题目大意:就是开始给你一个01序列,和q次询问,每次询问会给你一个区间,每次你会从这个区间内拿出一个数,在区间内的其他未被拿走的数字会加上 ...

  4. CodeForces - 364A Matrix(思维+数学)

    题目链接:点击查看 题目大意:给出一个长度为 n 的,只由十进制数字组成的字符串 s,可以构造出一个大小为 n * n 的矩阵,构造方法如下:b[ i ][ j ] = s[ i ] * s[ j ] ...

  5. CodeForces - 1327D Infinite Path(图论综合)

    题目链接:点击查看 题目大意:首先给出一个 1 ~ n 的排列,用 p 数组表示,再给出给个点的颜色,用 c 数组表示 然后抛出Infinite Path的定义:对于某个 i ,p[ i ] , p[ ...

  6. Codeforces Gym 100269G Garage 数学

    Garage 题目连接: http://codeforces.com/gym/100269/attachments Description Wow! What a lucky day! Your co ...

  7. CodeForces - 830C Bamboo Partition(数学+推公式)

    题目链接:点击查看 题目大意:给出 nnn 个位置可以种竹子,每个位置的竹子的高度需要到达 aia_iai​,所有竹子每天都会长高一个单位高度,同样每个竹子可以在任意位置砍一次,砍过之后竹子将不再长高 ...

  8. CodeForces - 1455E Four Points(数学+几何)

    题目链接:点击查看 题目大意:给出四个点,问最少移动多少步,可以使得四个点围成的矩形是正方形(这里的正方形允许退化成点) 题目分析:比赛时写了个三分,然鹅又双叒叕不知道哪里写崩了,还是太鶸了呀 首先对 ...

  9. CodeForces - 1355C Count Triangles(数学)

    题目链接:点击查看 题目大意:给出 A B C D ,规定 A <= x <= B <= y <= C <= z <= D ,问 ( x , y , z ) 三元组 ...

最新文章

  1. Swift41/90Days - 面向轨道编程 - Swift 中的异常处理
  2. 蒙版遮住全屏(包括导航栏)
  3. 停课集训 11.29
  4. python编写递归函数和非递归函数、输出斐波那契数列_python 入门之斐波那契数列递归表达式算法和非递归算法...
  5. 零基础入门深度学习(5) - 循环神经网络
  6. 系统架构师学习笔记-数据通信与计算机网络(二)
  7. Spring学习总结(25)——注解@PostConstruct和@PreDestroy使用总结
  8. LuoguP3045牛券Cow Coupons
  9. 计算机 统计学考研,统计学考研科目有哪些
  10. linux 文件比较覆盖,Linux系统 wget 覆盖本地文件
  11. 台式计算机识别不了u盘启动,如何解决惠普电脑uefi识别不了u盘
  12. 软件评测师题库--操作系统基础知识
  13. 【Gym - 100482B Farmer 】 思维
  14. 攻略(一):骑马与砍杀-潘德的预言mod快速自立攻略
  15. golang中的图像image处理详解
  16. 长沙学院计算机专业老师李彬,长沙学院2007-2008模具CADCAM_04机本教案【荐】.doc...
  17. 如何在word里插入PDF文件/图片
  18. Smarty模板引擎和MVC设计模式
  19. 数字货币正确的交易理念——第九章:关于杜绝锁单操作问题
  20. 概率论大作业C语言验证伯努利大数定律以及相对应的强大数定律、棣莫弗-拉普拉斯中心极限定理

热门文章

  1. MySQL分组查询—添加分组前筛选
  2. 下载Nacos源码并运行
  3. nginx转发websocket
  4. Spring5各模块之间的依赖关系
  5. 理解阻塞到底是什么回事
  6. HDFS的API操作-文件的上传和下载
  7. POI的入门:概述和创建EXCEL
  8. ES6新特性之函数优化-函数属性简写、箭头函数和解构表达式结合使用
  9. 方法的重写-覆盖父类方法,重写子类方法实现
  10. 使用RAID增加传统机器硬盘的性能