题目传送门

  传送门I

  传送门II

  传送门III

题目大意

  给定将$\left \{ 0, 1, \dots, m - 1\right \}$分成了不相交的两个非空集合$A$和$B$,给定$A$,问存在多少个整数$x$满足$0\leqslant x < m$且对于任意$a\in A, b \in B$满足$a + b\not \equiv x \pmod{m}$

  容易发现满足后一个条件的充分必要条件是对于任意$a \in A$,存在$a' \in A$使得$a + a' \equiv x \pmod{m}$。

  如果$a \leqslant x$,则易证$a' \leqslant x$。

  同样,如果$a > x$,则易证$a' > x$。

  所以这个数$x$将序列分成两部分,每一部分首尾配对后,每一对的和都等于$x$。

  那么怎么判断呢?我们发现$a + d = c + b$等价于$a - b = c - d$。

  所以我们只用差分一下判断是否是回文,再判断首尾的和是否等于$x$就行了。

Code

 /**
* Codeforces
* Problem#1045B
* Accepted
* Time: 77ms
* Memory: 7300k
*/
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <vector>
using namespace std;
typedef bool boolean; #define ull unsigned long long const int N = 2e5 + ;
const ull base = 1e9 + ; int n, M;
int ar[N];
int cr[N];
ull ph[N], sh[N], pb[N]; int add(int a, int b) {
return ((a += b) >= M) ? (a - M) : (a);
} inline void init() {
scanf("%d%d", &n, &M);
for (int i = ; i <= n; i++)
scanf("%d", ar + i);
} ull fquery(int l, int r) { // forward
if (l > r)
return ;
return ph[r] - ph[l - ] * pb[r - l + ];
} ull rquery(int l, int r) { // backward
if (l > r)
return ;
return sh[l] - sh[r + ] * pb[r - l + ];
} boolean ispar(int l, int r) {
return fquery(l, r) == rquery(l, r);
} vector<int> vec; inline void solve() {
ph[] = , sh[n] = , pb[] = ;
for (int i = ; i < n; i++)
ph[i] = ph[i - ] * base + (cr[i] = ar[i + ] - ar[i]);
for (int i = n - ; i; i--)
sh[i] = sh[i + ] * base + cr[i];
for (int i = ; i < n; i++)
pb[i] = pb[i - ] * base; for (int i = , x; i < n; i++) {
x = ar[] + ar[i];
// if (x >= M)
// break;
if (add(ar[i + ], ar[n]) == x && ispar(, i - ) && ispar(i + , n - ))
vec.push_back(x);
}
int x = add(ar[], ar[n]);
if ((x <= ar[] || x >= ar[n]) && ispar(, n - ))
vec.push_back(x);
printf("%d\n", (signed) vec.size());
sort(vec.begin(), vec.end());
for (int i = ; i < (signed) vec.size(); i++)
printf("%d ", vec[i]);
putchar('\n');
} int main() {
init();
solve();
return ;
}

Codeforces 1045B Space Isaac - 数论 - Hash的更多相关文章

  1. Codeforces 1045B Space Isaac

    Space Isaac 我们定义第一个集合为a, 第二个集合为b 先把a数组排序, 然后我们会以线段的形式得到b集合. 我们先用a[ 1 ]去和 b 中的元素结合, 只有size(a) 个数字未被覆盖 ...

  2. luogu2312 解方程 (数论,hash)

    luogu2312 解方程 (数论,hash) 第一次外出学习讲过的题目,然后被讲课人的一番话惊呆了. 这个题,我想着当年全国只有十几个满分.....然后他又说了句我考场A这道题时,用了5个模数 确实 ...

  3. [CodeForces - 1225C]p-binary 【数论】【二进制】

    [CodeForces - 1225C]p-binary [数论][二进制] 标签: 题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory limit 5 ...

  4. Codeforces Gym 100463B Music Mess Hash 逻辑题

    Music Mess Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments ...

  5. CodeForces 1056E - Check Transcription - [字符串hash]

    题目链接:https://codeforces.com/problemset/problem/1056/E One of Arkady's friends works at a huge radio ...

  6. codeforces 633C. Spy Syndrome 2 hash

    题目链接 C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  7. CodeForces - 615D Multipliers(数论)

    http://codeforces.com/problemset/problem/615/D 题意 给出m个质因子,组成一个数n.问n的约数的乘积是多少,输出mod 1e+7的结果. 分析 从输入我们 ...

  8. Codeforces Round #425 (Div. 2) Problem C Strange Radiation (Codeforces 832C) - 二分答案 - 数论

    n people are standing on a coordinate axis in points with positive integer coordinates strictly less ...

  9. [CodeForces - 447A] A - DZY Loves Hash

    A - DZY Loves Hash DZY has a hash table with p buckets, numbered from 0 to p - 1. He wants to insert ...

随机推荐

  1. 基本的sqlplus命令

    以下是一些sqlpus命令 remark          注释行set headsep     标题分隔符ttitle          头标题btitle          尾标题column   ...

  2. java基础---->Java的格式化输出

    在JavaSe5中,推出了C语言中printf()风格的格式化输出.这不仅使得控制输出的代码更加简单,同时也给与Java开发者对于输出格式与排列更大的控制能力.今天,我们开始学习Java中的格式化输出 ...

  3. Map 嵌套存储Map

    import java.util.HashMap;import java.util.Iterator;import java.util.Set;import java.util.Map.Entry; ...

  4. Kafka的安装是否成功的简单测试命令

    首先了解一下kafka的基本概念 .1. BrokerKafka集群包含一个或多个服务器,这种服务器被称为broker2. Topic每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topi ...

  5. Oracle课程档案,第四天

    “子查询”就是查询中嵌套着另一个查询,也即通过SELECT语句的嵌套使用形成子查询.当我们不知道特定的查询条件时,可以用子查询来为父查询提供查询条件以获得查询结果. 子查询先清除子查询 在清除主查询 ...

  6. 使用 jQuery 调用 ASP.NET AJAX Page Method

    文章来源:http://chungle.iteye.com/blog/406054 说到轻量级的客户端通信,我注意到大多数人喜欢使用 ASP.NET AJAX Page Method 多于 ASMX ...

  7. Codeforces 607A - Chain Reaction - [DP+二分]

    题目链接:https://codeforces.com/problemset/problem/607/A 题意: 有 $n$ 个塔排成一行,第 $i$ 个激光塔的位置为 $a_i$,伤害范围是 $b_ ...

  8. WebService,ESB笔记

    一.WebService是什么? WebService,是RPC的一样实现方式. RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算 ...

  9. RNN Train和Test Mismatch

    李宏毅深度学习 https://www.bilibili.com/video/av9770302/?p=8 在看RNN的时候,你是不是也会觉得有些奇怪, Train的过程中, 是把训练集中的结果作为下 ...

  10. luogu3830 [SHOI2012]随机树

    传送门:洛谷 题目大意:对于一个只有一个节点的二叉树,一次操作随机将这棵树的叶节点的下方增加两个节点.$n-1$次操作后变为$n$个叶节点的二叉树.求:(1)叶节点平均深度的期望值(2)树深度的数学期 ...