Gym - 102056C(2018EC final) - CRT

题目链接:https://vjudge.net/problem/Gym-102056C

 

解题思路:

很明显是在200个字符串中存在一个最前面的位置是4*k,它的值自然是0,之后每隔+4依然是4的倍数,所以它的值也是0,那么在这200个字符串中,我们可以枚举4,9,,25,49,121,169这6个数,利用中国剩余定理(CRT)可以用六个式子解出待定解x,那么如何快速判断x是否是可行解呢?我们首先预处理出sqrt(n)中的质数,枚举质数p,找到200个数中是p的倍数的数,看他是否能整除p*p,如果可以就是0。筛法时间复杂度O(sqrt(x)*log(200))

 

还有一个关键是要判断解得组合数到达多少时一定是无解的。不然200全0,那么岂不是可以解出4*9*25*49*121*169个x?显然这样是会超时的,结果是当解得组合数大于10000时是无解的。(可以去打表试试,证明不来= =,另外我也觉得这个地方是这题有点搞的地方)

 

#include<bits/stdc++.h> 
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int mx = 2e2 + 10;
const int a[] = {4,9,25,49,121,169};
int pri[mx*mx],M = 1,t[10];
int 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值