题目

Task1:试判断能否构造并构造一个长度 $n$ 的 $1...n$ 的排列,满足其 $n$ 个前缀和在模 $n$ 的意义下互不相同

Task2:试判断能否构造并构造一个长度 $n$ 的 $1...n$ 的排列,满足其 $n$ 个前缀积在模 $n$ 的意义下互不相同。

分析

既然考虑原数列很难,就直接考虑前缀和和前缀积。

对于task1:

在模 $n$ 意义下,$\{1,2,3,...n\}$ 等价于 $ \{0,1,-1,2,-2,... \}$,我们将它设为前缀和。

其次,我们可以发现 $n$ 必定出现在数列的第一位,否则 $n$ 出现前后的两个前缀和会相等。已知首项,已知前缀和,就可以推出各项。奇数不行。

总结:

当 $n$ 为奇数时,无法构造出合法解(1特判)

当 $n$ 为偶数时,可以构成形如 $n, n-1, 2, n-3, 4...$ 这样的数列

对于Task2:

根据消元法,构造数列 $1,\frac{2}{1},\frac{3}{2},...,\frac{n-1}{n-2}$。

显然,合数没有解,因为其两个两个因子相乘之后,后面取模都为0了。

显然,首项为1,末项为n。

只需证明中间那些数是互不相同的。因为 $\frac{k+1}{k} = 1 + \frac{1}{k}$,当 $n$为质数时,每个元素都有逆元且不相同。

总结:

当 $n$ 为合数,无法构造出合法解(特判4)

当 $n$ 为质数,可以构造形如 $1,\frac{2}{1},\frac{3}{2},...,\frac{n-1}{n-2},n$.(特判1)

注意开 long long!!!

#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const int maxn = + ;
int task, T;
int n; void solve1()
{
if(n == )
{
printf("2 1\n");
return;
}
if(n&)
{
printf("0\n");
return;
}
printf("2 %d ", n);
ll pre = ;
//printf("n:%d\n", n);
for(int i = ;i < n;i++)
{
int tmp = ((i&) == ? : -) * ((i+) / ); //printf("tmp: %d\n", tmp);
printf("%d", (tmp -pre+n)%n);
if(i == n-) printf("\n");
else printf(" ");
pre = tmp;
}
} bool is_prime[maxn + ];
void sieve(int n)
{
int m = (int)sqrt(n + 0.5);
memset(is_prime, true, sizeof(is_prime));
is_prime[] = is_prime[] = false; //1是特例
for (int i = ; i <= m; i++) if (is_prime[i])
for (int j = i * i; j <= n; j += i) is_prime[j] = false;
} int inv[maxn];
void init_inv(int n, int mod)
{
inv[] = ;
for(int i = ;i < n;i++) inv[i] = 1LL * (mod - mod / i) * inv[mod % i] % mod; //加mod不改变结果
} void solve2()
{
if(n == )
{
printf("2 1\n");
return;
}
if(n == )
{
printf("2 1 3 2 4\n");
return;
}
sieve(n);
if(!is_prime[n])
{
printf("0\n");
return;
}
init_inv(n, n);
printf("2 1 ");
for(int i = ;i <= n-;i++) printf("%d ", 1LL * i * inv[i-] % n);
printf("%d\n", n);
} int main()
{
scanf("%d%d", &task, &T);
while(T--)
{
scanf("%d", &n);
if(task == ) solve1();
else solve2();
}
return ;
}

参考链接:

1. https://oi-wiki.org/basic/construction/

2. https://www.luogu.org/problemnew/solution/P3599

P3599 Koishi Loves Construction——构造题的更多相关文章

  1. C 洛谷 P3599 Koishi Loves Construction [构造 打表观察]

    题目描述 Koishi决定走出幻想乡成为数学大师! Flandre听说她数学学的很好,就给Koishi出了这样一道构造题: Task1:试判断能否构造并构造一个长度为的的排列,满足其个前缀和在模的意义 ...

  2. 洛谷P3599 Koishi Loves Construction 构造

    正解:构造 解题报告: 传送门! 这题俩问嘛,就分成两个问题港QwQ 就按顺序趴,先港第一问QwQ 首先要发现,n在膜n意义下就是0嘛 那作为前缀和的话显然它就只能放在第一个 然后再想下,发现,如果n ...

  3. 【题解】P3599 Koishi Loves Construction

    [题解]P3599 Koishi Loves Construction \(\mod n\) 考虑如何构造,发现\(n\)一定在第一位,不然不行.\(n\)一定是偶数或者是\(1\),不然 \(n|\ ...

  4. 题解-Koishi Loves Construction

    题解-Koishi Loves Construction 前缀知识 质数 逆元 暴搜 Koishi Loves Construction 给定 \(X\),\(T\) 组测试数据,每次给一个 \(n\ ...

  5. 【Luogu3602】Koishi Loves Segments(贪心)

    [Luogu3602]Koishi Loves Segments(贪心) 题面 洛谷 题解 离散区间之后把所有的线段挂在左端点上,从左往右扫一遍. 对于当前点的限制如果不满足显然会删掉右端点最靠右的那 ...

  6. cf251.2.C (构造题的技巧)

    C. Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabyt ...

  7. hdu4671 Backup Plan ——构造题

    link:http://acm.hdu.edu.cn/showproblem.php?pid=4671 其实是不难的那种构造题,先排第一列,第二列从后往前选. #include <iostrea ...

  8. Educational Codeforces Round 7 D. Optimal Number Permutation 构造题

    D. Optimal Number Permutation 题目连接: http://www.codeforces.com/contest/622/problem/D Description You ...

  9. Codeforces 482 - Diverse Permutation 构造题

    这是一道蛮基础的构造题. - k         +(k - 1)      -(k - 2) 1 + k ,    1 ,         k ,             2,    ....... ...

随机推荐

  1. kafka生产者消费者

    import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.Co ...

  2. Javascript 闭包何时回收?

    定义 闭包是函数和声明该函数的词法环境的组合.闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量. 范例 fun ...

  3. python 2.7 环境配置

    原文地址:Python 2.7的安装(64位win10) Python 2.7.12 下载地址:https://www.python.org/downloads/ 安装路径D:\Program Fil ...

  4. TypeScript 命名空间

    随着代码的不断增加,我们需要有组织的组合代码.TypeScript在1.x版本中提供了命名空间的方式进行代码组织,这也是TypeScript官方代码的组织方式.同时,TypeScript还实现了Jav ...

  5. PAT(B) 1044 火星数字(Java)进制转换

    题目链接:1044 火星数字 (20 point(s)) 题目描述 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, ...

  6. 【HC89S003F4开发板】 4端口消抖

    HC89S003F4开发板端口消抖 一.前言 看到资料里有中断消抖的例子,因为以前项目里有遇到高频干扰频繁退出休眠的情况,所以好奇用这个配置能不能解决. 二.对demo进行修改 @实现效果 P01设置 ...

  7. Python2和3字符编码的区别

    Python2和3字符编码的区别 一.字符编码应用之Python 1.1 执行Python程序的三个阶段 Python test.py(我再强调一遍,执行test.py的第一步,一定是先将文件内容从硬 ...

  8. k8s部署nacos

    如果是在centos7上直接启动nacos 注意修改启动命令   sh startup.sh -m standalone 访问路径 http://********:8848/nacos/index.h ...

  9. vscode之万里挑一

    前置 我们经常在工作区中打开很多项目文件夹,找起来比较麻烦. 步骤

  10. Spring Bean的作用域以及lookup-method标签的使用

    Spring Framework支持五种作用域,如下图所示: singleton:表示一个容器中只会存在一个bean实例,无论在多少个其他bean里面依赖singleton bean,整个容器都只会存 ...