题目分析

首先,所求集合中的 111 的个数 sss 是可以预处理出来的,如果不是整数,直接输出 −1-1−1 。然后,我们考虑设 cnticnt_icnti​ 为从第 iii 位开始之后的 mmm 位中的 111 的个数,为方便起见,我们定义第 nnn 位之后是第 111 位。由于个数 sss 与 mmm 的比值是等同于整体串中的 111 的个数与 nnn 的比值的,而在所有的 cntcntcnt 值中,每个数一定被遍历到了 mmm 次,整体上来讲,cntcntcnt 的平均值一定是 sss,因此,我们一定可以找到一个 iii 使得 cnti≤scnt_i\leq scnti​≤s,也一定可以找到一个 iii 使得 cnti≥scnt_i\geq scnti​≥s。我们由定义可以知道,相邻两项的 cntcntcnt 值至多是差 111 的(包括 111 与 nnn),因此, cntcntcnt 数组中,在从一个大于等于 sss 的值不断依次遍历,遍历到一个小于等于 sss 的值时,中间一定经过了一个等于 sss 的值,即,我们可以很容易证明可行的答案一定不超过 222 段区间,当存在不跨越 nnn 与 111 的排列中的 cntcntcnt 值为 sss 时,答案为一段,否则答案必然是一段前缀与一段后缀,遍历即可,时间复杂度为 O(n)O(n)O(n) 。

(化学课写的)AC 代码

#include<iostream>
#include<cstdio>using namespace std;int a[250250],sum[250250];void NH3_H2O(){int n,m; scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%1d",a+i),sum[i]=sum[i-1]+a[i];int s=sum[n];if(1ll*m*s%n) return (void) puts("-1");s=1ll*m*s/n;//s numbers neededfor(int i=n;i>=m;i--){if(sum[i]-sum[i-m]==s) return (void) printf("1\n%d %d\n",i-m+1,i);}for(int i=1;i<m;i++){if(sum[i]+sum[n]-sum[n-m+i]==s){printf("2\n%d %d\n%d %d\n",1,i,n-m+i+1,n);return;}}
}int main(){int CH3COOH=1; scanf("%d",&CH3COOH);while(CH3COOH--) NH3_H2O();return 0;
}

另外,这场 F 和 A 一样水 QAQ。

CF1658F 题解相关推荐

  1. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  2. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  3. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

  4. [JS]题解 | #岛屿数量#

    题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...

  5. [JS] 题解:提取不重复的整数

    题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. [洛谷1383]高级打字机 题解

    题解 这道题一看就珂以用主席树啊 这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入, 之后对于T操作,在上一个版本的len + 1上直接执行插入 ...

  8. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

  9. 【题解搬运】PAT_L1-009 N个数求和

    从我原来的博客上搬运.原先blog作废. (伪)水题+1,旨在继续摸清这个blog(囧 题目 就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和 ...

最新文章

  1. Python统计学-006:描述统计-方差
  2. 使用@Configuration注解来代替Spring的bean配置
  3. 前端学习(3238):react生命周期4
  4. LeetCode 267. 回文排列 II(回溯)
  5. 【Java并发性和多线程】Java中的锁
  6. as2.0与php交互,Flash(AS2.0)与php通讯 分享
  7. 单片机单口不可用或被占用_昆明工业控制单片机应用开发价格
  8. linux命令join的用法,linux join命令
  9. UserWarning: Usage of dash-separated ‘script-dir‘ will not be supported in future versions. 笔记
  10. ClickHouse数据库和数据表
  11. android 键盘快捷指令
  12. python乘法函数_乘积(python乘法函数)
  13. 确保软件开发生命周期(SDLC)的安全
  14. copy和mutableCopy都是浅拷贝!!!
  15. 怎么给电脑安装window7系统呢
  16. 双基地mimo雷达matlab仿真,双基地MIMO雷达的干扰研究
  17. LeetCode 342. 4的幂 附带《Effective C++》pdf电子书
  18. 如何把大的‘tar‘存档文件分割成特定大小的多个文件
  19. 笨办法学Python(零)
  20. 蓝牙协议分析仪---BPA600使用介绍

热门文章

  1. getservbyname()函数与getservbyport()函数
  2. 腾讯的这个框架火了!
  3. 使用VRRP技术实现网关设备冗余,附详细配置实验
  4. 《Android源码设计模式解析与实战》读书笔记(七)——策略模式
  5. http——基础知识
  6. 汇编语言——指令系统小结
  7. 【linux进阶4】apache的服务使用(图文巨详细解释apache的正向和反向代理)
  8. 剑指offer.把数字翻译成字符串
  9. java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to yo
  10. Android App优化之Layout怎么摆