题目

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. English Learning -- 0611--When Burnout Is a Sign You Should Leave Your Job

    I like the following article from Harvard Business Review, as I ever experienced burnout at work. Ve ...

  2. [PDF] - 获取 RadioButtonList 控件值的方法

    背景 目标是通过 iTextSharp 读取 PDF 模板,填充内容后以生成新 PDF 文件.利用 福昕PDF编辑器个人版 可以获取到 RadioButtonList 的组名,但是获取不到每一个 Ra ...

  3. redis 主从 哨兵

    数据库为什么要读写分离 写代码好多年了,大家先抛弃在代码框架里面各种花哨的设计之外,写的代码到最后无非就是为了增删查改数据库.一般项目数据库刚开始只是但一个库,随着数据量的增大,就开始优化数据库(抛开 ...

  4. Tp5.1 管理后台开发纪要

    1. tp5.1 对网页是有缓存机制的 E:\phpStudy\PHPTutorial\WWW\NewAdmin\thinkphp\library\think\Template.php 下displa ...

  5. HDOJ-1100 Trees made to order

    一.题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1100 二.题目分析 对二叉树的所有形态顺序编号,编号规则是:节点数越多的编号越大:节点数相等,左子 ...

  6. ACM集训

    2019-07-18 09:06:10 emmm.... 昨天5个小时做了一道题,心情复杂,不着急慢慢来 Ivan recently bought a detective book. The book ...

  7. Scratch编程与高中数学算法初步

    scratch编程与高中数学算法初步 一提到编程,大家可能觉得晦涩难懂,没有一定的英语和数学思维基础的人,一大串的编程代码让人望而步,何况是中小学生.   Scratch是一款由麻省理工学院(MIT) ...

  8. Mybatis动态sql及分页、特殊符号

    目的: mybatis动态sql(案例:万能查询) 查询返回结果集的处理 mybatis的分页运用 mybatis的特殊符号 mybatis动态sql(案例:万能查询) 根据id查询 模糊查询 (参数 ...

  9. Markdown语法图文全面详解(转)

    基本语法参考    转自:https://blog.csdn.net/u014061630/article/details/81359144 更改字体.颜色.大小,设置文字背景色,调整图片大小设置居中 ...

  10. nginx 禁止浏览器缓存

    如果我们使用Nginx作为静态资源服务器,那么可以使用expires进行缓存控制. location /{ expires 1s; } 如果Get页面未做任何修改,服务器就是对客户端返回304 Not ...