整理的算法模板合集: ACM模板

点我看算法全家桶系列!!!

实际上是一个全新的精炼模板整合计划


2018 ICPC EC Finals C. Heretical … Möbius

Weblink

https://codeforces.com/gym/102056/problem/C

Problem

给定长度为 200200200 的 010101 序列 ∣μ(i)∣|\ \mu(i)\ |∣ μ(i) ∣,找到符合的最小的起点 xxx,即 ∣μ(x)∣∼∣μ(x+199)∣|\ \mu(x)\ |\sim |\ \mu(x+199)\ |∣ μ(x) ∣∼∣ μ(x+199) ∣ 要求完全的给定的序列对照一致。

Solution

由于给定的是绝对值的 010101 串,所以只有 μ(i)=0\mu(i)=0μ(i)=0 有用,所以从这里出发考虑。

我们知道 μ(x)=0\mu(x)=0μ(x)=0 则 xxx 一定含有因子 p2p^2p2,而序列长度仅为 200200200 ,这好像在提示着我们些什么。我们知道 200200200 以内的因子 p2p^2p2 一共就只有 666 个,即:4,9,25,49,121,1694,9,25,49,121,1694,9,25,49,121,169。也就是说在一个长度为 200200200 的连续自然数序列里,所有 μ(i)=0\mu(i)=0μ(i)=0 的数,一定至少存在这 666 个 p2p^2p2 因子。所以就有了思路:

对于一个正确合法的起点 xxx ,在 x+{0∼3}x+\{0\sim 3\}x+{0∼3} 的范围内的数,一定存在 444 的倍数,即 xxx 模 444 的模数,也就是输入的序列为 000 。因为 {0∼3}\{0\sim 3\}{0∼3} 是 444 的简化剩余系,同理,对于其他的 555 个 p2p^2p2 因子同样成立。我们设 m={4,9,25,49,121,169}m=\{4,9,25,49,121,169\}m={4,9,25,49,121,169},也就意味着我们就可以枚举每个因子的简化剩余系,一定能找到一个数 y=x+aiy=x+a_iy=x+ai​,是 mim_imi​ 的倍数,即含有 mim_imi​ 这个 p2p^2p2 因子,即 x≡ai(modmi)x\equiv a_i(\mod m_i)x≡ai​(modmi​) 。至于如何判断枚举到的 iii 是否合法,我们可以枚举一下 ai+ki×mia_i+k_i\times m_iai​+ki​×mi​ 看该位置的字符串是否为 000 。这样我们就得到了 6 个同余方程 x≡ai(modmi)x\equiv a_i(\mod m_i)x≡ai​(modmi​),可以直接用中国剩余定理得到一个解,这个解就是题目中想要求的一个解,我们判断一下这个解是否合法,并且答案要求的是最小的解,所以我们对于每一个解取 min⁡\minmin(如果当前解 vvv 不合法,那么就看下一个解 x+Mx+Mx+M 是否合法,以此类推)那么如何得到所有的可能的解呢?显然可以按照上面的思路,爆搜搜到 666 个 aia_iai​ ,然后 CRT 求一下解 vvv ,for 循环判断一下是否与题中输入的字符串完全相同即可。

最后需要判断一下输入的 μ\muμ 序列是否合法,也就是 (2004)=50∼87=(2004=50+2009=22+20025=8+20049=4+200121=2+200169=1)(\cfrac{200}{4})=50\sim 87=(\cfrac{200}{4}=50 + \cfrac{200}{9}=22 + \cfrac{200}{25}=8 + \cfrac{200}{49}=4 + \cfrac{200}{121}=2 + \cfrac{200}{169}=1 )(4200​)=50∼87=(4200​=50+9200​=22+25200​=8+49200​=4+121200​=2+169200​=1) ,不然会 T 的很惨 …

Code

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>using namespace std;
typedef long long ll;
const int N = 600007, INF = 0x3f3f3f3f;
const double eps = 1e-8;
typedef int itn;
int t, n;
ll M = 1;
string str = " ";
string s;
int m[] = {0, 4, 9, 25, 49, 121, 169};
int cnt, primes[N];
//50 22 8 4 2 1 = 87
int a[N];
int ans = INF;
bool vis[N];void init(int n)
{for(int i = 2; i <= n; ++ i) {if(vis[i] == 0) primes[ ++ cnt] = i;for(int j = 1; j <= cnt && i * primes[j] <= n; ++ j) {vis[i * primes[j]] = true;if(i % primes[j] == 0) break;}}
}inline int exgcd(itn a, int b, int& x, int& y)
{if(b == 0) {x = 1, y = 0;return a;}int d = exgcd(b, a % b, x, y);int z = x;x = y;y = z - y * (a / b);return d;
}int CRT()
{int res = 0;int x, y, GCD;for(int i = 1; i <= 6; ++ i) {int Mi = M / m[i];int d = exgcd(Mi, m[i], x, y);x = (x % m[i] + m[i]) % m[i];res = (res + 1ll * Mi * a[i] * x) % M;}return (res + M) % M;
}int mu(int v)
{for(int i = 1; i <= cnt && primes[i] * primes[i] <= v; ++ i) {if(v % (primes[i] * primes[i]) == 0) return 0; }return 1;
}bool check(itn v)
{for(int i = 1; i <= 200; ++ i) {if(mu(v + i - 1) != (str[i] - '0')) return false;}return true;
}bool judge(itn a, int p)
{itn x;if(a == 0) x = 1;else x = 1 - a + p;while(x <= 200) {if(str[x] != '0') return false;x += p;}return true;
}void dfs(int now)
{if(now == 7) {int v = CRT();if(v == 0) v = M;//cout << v << endl;while(v + 199 <= 1e9) {if(v > ans)break;if(check(v)) {ans = v;}v += M;}return ;}for(int i = 0; i < m[now]; ++ i) {if(judge(i, m[now])) {a[now] = i;dfs(now + 1);}}return ;
}itn main()
{init(1e5);for(int i = 1; i <= 6; ++ i) {M *= 1ll * m[i];}//cout << M << endl;for(int i = 1; i <= 10; ++i) {cin >> s;str += s;}//cout << str << endl;//cout << str.size() << endl;int cnt = 0;for(int i = 1; i <= 200; ++ i) {if(str[i] == '0')cnt ++ ;}//cout << cnt << endl;if(cnt < 50 || cnt > 88) {puts("-1");return 0;}dfs(1);//cout << ans << endl;if(ans == INF) {puts("-1");}else printf("%d\n", ans);return 0;
}

2019 ICPC EC Finals C. Heretical … Möbius(中国剩余定理,序列检验)相关推荐

  1. 2019 ICPC World Finals Problem J. Miniature Golf

    2019 ICPC World Finals Problem J. Miniature Golf Solution 设lll为l0l_0l0​时iii的总分为si,l0s_{i,l_0}si,l0​​ ...

  2. 2019 ICPC World Finals Problem B. Beautiful Bridges

    2019 ICPC World Finals Problem B. Beautiful Bridges Solution 太菜了,sbsbsb题调了一个下午. 首先有一个显然的O(n3)O(n^3)O ...

  3. 基于Miracl库的中国剩余定理C语言实现

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/tch3430493902/articl ...

  4. CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 CF338D GCD Table(拓展中国剩余定理,细节处理,2900分) Problem 有一张 n ...

  5. 初等数论--同余方程--同余方程组:中国剩余定理

    初等数论--同余方程--同余方程组:中国剩余定理 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数论 ...

  6. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  7. 信奥中的数学:孙子定理 中国剩余定理

    孙子定理 中国剩余定理 孙子定理 中国剩余定理_Dreamer Thinker Doer-CSDN博客 中国剩余问题(简介+详解) 中国剩余问题(简介+详解)_dreamzuora的博客-CSDN博客 ...

  8. 数论 —— 线性同余方程组与中国剩余定理

    [线性同余方程组] 由若干个线性同余方程构成的线性方程组. 例如: 其解法最早由我国<孙子算经>给出,因此解法称为"孙子定理",又叫"中国剩余定理" ...

  9. 通常情况下的中国剩余定理

    这几天学了学中国剩余定理....本来计划是一天学互质版一天学非互质版的,结果非互质版就学了好长时间...不过好在会证明了,考场上大力推一波应该是没问题的吧... 中国剩余定理是求形如x≡a1(mod ...

最新文章

  1. 优化你的CPU来做深度学习
  2. 浅谈JVM的实现与垃圾回收机制
  3. mysql update 多个字段_MySql-笔记
  4. 大数据 java 代码示例_功能Java示例 第7部分–将失败也视为数据
  5. 功能Java示例 第7部分–将失败也视为数据
  6. NHibernate 异常及解决办法(长期添加中)
  7. [深度学习NPL]word2vector总结与理解
  8. LA 4127 - The Sky is the Limit (离散化 扫描线 几何模板)
  9. 华为云获CCF BDCI 2019金融实体级情感分析大赛冠军
  10. Android 监听开机完成广播,完成监听SIM卡功能
  11. 类型②typeof 操作符
  12. 从4千/平到4.5万/平!南京房价10年血泪史 看哭所有人!
  13. 电脑杀毒软件哪个好?好用的电脑杀毒软件推荐
  14. 麻省理工公开课人工智能笔记五
  15. http://www.horizon3d.com.cn
  16. 活动预告丨易盾CTO朱浩齐将出席2018 AIIA大会,分享《人工智能在内容安全的应用实践》...
  17. GreenDao 使用详解(入门篇)
  18. C++洛谷题解(8)
  19. AI上推荐 之 AFM与DIN模型(当推荐系统遇上了注意力机制)
  20. SAP 账号被锁定,显示无法再进行口令登录的解决办法

热门文章

  1. 一道有关动态规划(Dynamic Programming)的网易面试题
  2. 使用Python部署机器学习模型的10个实践经验
  3. Ret2Libc(2) (有system、无‘/bin/sh’)绕过NX、ASLR
  4. mysql创建表语句 引擎、编码和字符集设置
  5. ACL 2018最佳论文公布!计算语言学最前沿研究都在这里了
  6. 使用npm link 创建本地模块
  7. 使用python调用zabbix接口截取监控图并生成Word文档
  8. MySQL体系结构之物理文件
  9. 动力节点Java培训告诉你Java线程的多功能用法
  10. 自动分析源代码,创建函数地图展示调用关系