题意 :

  • 给一长度为n的字符串,进行以下操作,将所有字符都变成字符c :取一个整数1<=i<=n1<=i<=n1<=i<=n,令所有不被i整除的j有s[j] == c,求最小操作次数

思路 :

  • 如果s全为c,输出0
  • 如果最后一位为c,输出1 n
  • 如果最后一位不为c,从2开始枚举,考虑是否有一个数能将所有字符改为c,优化枚举方案,用类似于埃氏筛的思想,考虑当前这个数的所有倍数在字符串中所对应的字符是否不是c,如果有的话这个数就不合理,这样的复杂度是O(nlogn)O(nlogn)O(nlogn),可以过
  • 如果有这样的数 输出 1 x
  • 如果没有 输出 2 ,取一个非n因数的任意数(比如n−1n-1n−1,就不需要枚举了)和n
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#define endl '\n'using namespace std;typedef long long ll;void solve()
{int n;char c;string s;cin >> n >> c >> s;bool flag = true;for (int i = 0; i < n; i ++ )if (s[i] != c){flag = false;break;}if (flag){cout << 0 << endl;return ;}if (s[n - 1] == c){cout << 1 << endl << n << endl;return ;}for (int i = 2; i <= n; i ++ ){bool ok = true;for (int j = i; j <= n; j += i)if (s[j - 1] != c){ok = false;break;}if (ok){cout << 1 << endl << i << endl;return ;}}cout << 2 << endl << n - 1 << ' ' << n << endl;
}int main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int _ = 1;cin >> _;while (_ -- ){solve();}return 0;
}
  • 优化 :考虑证明结论 n的后一半数中,存在某个值不在下标序列中,则这个值可以作为答案。充分性显然成立,必要性考虑n的前一半数如果作为答案,则一定有一个它的倍数属于n的后一半数,且不在下标序列中
  • 上述所有情况都不满足时,输出n和n-1即可消除所有数

Make Them Equal 埃氏筛法(1200)相关推荐

  1. 进阶必备:素数筛法(欧拉,埃氏筛法)

    筛选素数其实有两种比较高效的算法可以提供选用,分别是:Eratosthenes筛选法与欧拉筛选法.但是欧拉算法的普适性比较高,所以这里就只介绍欧拉函数的算法. 筛选的范围较小的话,欧拉算法,数据较大, ...

  2. 素数计算之埃氏筛法、欧拉筛法

    埃氏筛法 int main() {const int maxNumber=200;int isPrime[maxNumber];int i;int x;for (i=0;i<maxNumber; ...

  3. C++Eratosthenes埃氏筛法获取素数列表的实现算法(附完整源码)

    C++Eratosthenes埃氏筛法获取素数列表的实现算法 C++Eratosthenes埃氏筛法获取素数列表的实现算法完整源码(定义,实现,main函数测试) C++Eratosthenes埃氏筛 ...

  4. 埃氏筛法的一般写法(区间筛法)

    问题: 求 $[L, R]$ 之间的素数表 解法: 一个合数 $n$ 的最小素因子不超过 $\sqrt{n}$. 先用埃氏筛法求出 $[1,\lfloor \sqrt{R} \rfloor]$ 上的素 ...

  5. 埃氏筛法求质数(例如:200以内的质数)

    传统求质数 全部遍历,是否有因数可以整除 private boolean isPrime(int n){if(n < 2){return false;}if(n == 2 || n == 3 | ...

  6. 埃拉托色尼筛选法巧解质数问题(埃氏筛法求解素数问题)

    背景: 素数(即质数)问题是老问题了,程序员面试问题,大小比赛的热门题. 比如 最简单的判断素数问题,或者计算素数的个数,等等. 简单的判断素数函数: 素数的定义:指在大于1的整数中,只能被1和它本身 ...

  7. 埃氏筛法求素数(C语言)

    问题要求: 用埃氏筛法求100000以内的素数,并输出总个数. 知识简介: 埃氏筛法,全名埃拉托斯特尼筛法,也叫爱氏筛法,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法. 要得到 自然数 ...

  8. 筛质数—(朴素筛法、埃氏筛法、欧拉筛法(线性筛法))

    筛质数时首先要了解质数的定理:1~n中有  个质数 下面再来看具体算法: 1.朴素筛法: 直接把2~n-1中质数和合数的倍数都筛一遍,其代码如下所示: int primes[N],cnt=0; boo ...

  9. 【中国大学MOOC】java程序设计-week3-用“埃氏筛法”求2~100以内的素数

    1.题目 用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数. 要求使用数组及增强的for语 ...

最新文章

  1. 如何正确处理Android6.0+的运行时权限申请
  2. 学习 Message(4): 通过 Application.OnMessage 或 TApplicationEvents 响应消息
  3. css之px自动转rem—sublime 插件CSSREM
  4. iPad iPhone程序增加和删除启动画面
  5. 集合 Collection 与迭代器 Iterator
  6. CSS font-family字体大合集
  7. 使用PaddlePaddle实现车牌识别
  8. 十、PWM脉宽调制信号的发生与控制
  9. top工具全字段解析+实战(一)
  10. 如何在NVivo中使用编码条探索编码?
  11. java if经典程序_java经典程序题15道(另附自己做的答案)
  12. 《Kotin 极简教程》第13章 使用 Kotlin 和 Anko 的Android 开发
  13. 开发中使用到的sql总结
  14. python数据拟合固定参数_固定某些参数的双峰高斯分布拟合
  15. html如何让网页的字变小,网页的字变小了怎么办 网页字体调整方法【图文】
  16. SVG描边动画实现过程
  17. mysql入门视频 吾_学习猿地-全网最新版本MySQL8全套视频教程(学完这个课 MySQL 就精通了)...
  18. 苹果cms数据.php,苹果cms数据库常用sql语句对照及使用方法
  19. 如何成为Java软件工程师
  20. [ArcGIS] 空间分析(十)3D分析 - 天际线 3D点要素、多面体创建 -错误合集

热门文章

  1. SAP DIMP行业包
  2. 13、Power Query-逆透视列的解析(上)
  3. 柿子不能和什么同吃?柿子相克食物大盘点
  4. 程序员跳槽的10个建议
  5. 记Redis那坑人的HGETALL
  6. 求职受性别限制?数据指明2021女性求职新方向
  7. 从卖冰箱到卖年夜饭,看海尔智家生态品牌新成果
  8. solr6 java_Solr6 快速入门教程
  9. python基础教程小甲鱼-小甲鱼零基础入门学习Python3视频教程全套96集
  10. ewomail 内部通讯_教你搭建自己的邮件服务器-Ubuntu 18.04下通过Docker使用EwoMail实现...