洛谷P3599 Koishi Loves Construction 构造
正解:构造
解题报告:
这题俩问嘛,就分成两个问题港QwQ
就按顺序趴,先港第一问QwQ
首先要发现,n在膜n意义下就是0嘛
那作为前缀和的话显然它就只能放在第一个
然后再想下,发现,如果n是奇数那1+...+n显然是n的倍数,就又是个膜意义下=0的,GG
偶数显然麻油关系咯QwQ
所以我们就可以先特判下,如果n是奇数直接GG辣(昂n==1要特判下吼QwQ
然后显然的是既然有解了就是一定能表示出所有的[0,n-1]
然后我们就这么想吼(以下表示都是在膜意义下的QwQ
1+n=1
3+(n-2)=1
5+(n-4)=1
...
!有没有get到规律
对就是说,我们把1和n放相邻,3和(n-2)放相邻,5和(n-4)放相邻
但是又有个问题鸭QAQ
就是,我们这样子只能表示出[1,n/2]嘛
然后考虑[n/2+1,n]显然是在这个过程中表示出来了
然后我jio得我前面列的时候就很清楚地提醒出来辽?
就是
(n-2)+1=n-1
(n-4)+2=n-2
(n-6)+4=n-3
综上,T1解决辽
get?
然后就港第二问QwQ
第二问依然是先利用n%n=0的特殊性质
所以n当然放在最后一个咯QwQ
然后这时候就要发现那就得(n-1)!不是n的倍数鸭
然后合数就被排除掉辽(n==4也要特判QwQ
然后剩下的就hin爽鸭
可以构造
1 2/1 3/2 4/3 5/4 ...
能get到的趴?
然后显然是逆元走一波就over辣!
然后这题我第一次交只有79pts,,,放下错解给大嘎参考下QAQ
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(register ll i=x;i<=y;++i) inline ll read()
{
register char ch=getchar();register ll x=;register bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline void wk1()
{
register ll n=read();
if(n!= && (n&)){printf("0\n");return;}
if(n==){printf("2 1\n");return;}
printf("2 %lld ",n);rp(i,,n)(i&)?printf("%lld ",n-i+):printf("%lld ",i-);printf("\n");
}
inline void work1()
{
register ll T=read();
while(T--)wk1();
}
inline bool pd(ll n)
{
if(n==)return ;
rp(i,,sqrt(n))if(n%i==)return ;
return ;
}
inline ll ksm(ll x,ll y)
{
ll t=y,ans=;y-=;
while(y)
{
if(y&)ans=ans*x%t;
y>>=;x=x*x%t;
}
return ans;
}
inline void wk2()
{
register ll n=read();
if(pd(n)){printf("0\n");return;}
printf("2 1 ");rp(i,,n-)printf("%lld ",i*ksm(i-,n)%n);printf("%lld\n",n);
}
inline void work2()
{
register ll T=read();while(T--)wk2();
} int main()
{
ll X=read()-;X?work2():work1();
return ;
}
upd:我知道我代码错哪儿了QAQ大嘎引以为患一下QAQ就是我题解里不是港了4要特判嘛然后我忘记特判了,,,QAQ好那我放下我A了的代码yep!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(register ll i=x;i<=y;++i) const ll N=+;
ll inv[N]; inline ll read()
{
register char ch=getchar();register ll x=;register bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline void wk1()
{
register ll n=read();
if(n!= && (n&)){printf("0\n");return;}
if(n==){printf("2 1\n");return;}
printf("2 %lld ",n);rp(i,,n)(i&)?printf("%lld ",n-i+):printf("%lld ",i-);printf("\n");
}
inline void work1()
{
register ll T=read();
while(T--)wk1();
}
inline bool pd(ll n)
{
if(n==)return ;
rp(i,,sqrt(n))if(n%i==)return ;
return ;
}
inline void wk2()
{
register ll n=read();
if(n==){printf("2\n1 3 2 4\n");return;}
if(n==){printf("2\n1\n");return;}
if(pd(n)){printf("0\n");return;}
printf("2\n");
inv[]=;printf("1 ");
rp(i,,n)inv[i]=(ll)n-(inv[n%i]*(n/i))%n;
rp(i,,n-)printf("%lld ",i*inv[i-]%n);
printf("%lld\n",n);
}
inline void work2()
{
register ll T=read();while(T--)wk2();
} int main()
{
ll X=read()-;X?work2():work1();
return ;
}
洛谷P3599 Koishi Loves Construction 构造的更多相关文章
- C 洛谷 P3599 Koishi Loves Construction [构造 打表观察]
题目描述 Koishi决定走出幻想乡成为数学大师! Flandre听说她数学学的很好,就给Koishi出了这样一道构造题: Task1:试判断能否构造并构造一个长度为的的排列,满足其个前缀和在模的意义 ...
- P3599 Koishi Loves Construction——构造题
题目 Task1:试判断能否构造并构造一个长度 $n$ 的 $1...n$ 的排列,满足其 $n$ 个前缀和在模 $n$ 的意义下互不相同 Task2:试判断能否构造并构造一个长度 $n$ 的 $1. ...
- 【题解】P3599 Koishi Loves Construction
[题解]P3599 Koishi Loves Construction \(\mod n\) 考虑如何构造,发现\(n\)一定在第一位,不然不行.\(n\)一定是偶数或者是\(1\),不然 \(n|\ ...
- 洛谷P3602 Koishi Loves Segments(贪心,multiset)
洛谷题目传送门 贪心小水题. 把线段按左端点从小到大排序,限制点也是从小到大排序,然后一起扫一遍. 对于每一个限制点实时维护覆盖它的所有线段,如果超过限制,则贪心地把右端点最大的线段永远删去,不计入答 ...
- E 洛谷 P3598 Koishi Loves Number Theory[数论]
题目描述 Koishi十分喜欢数论. 她的朋友Flandre为了检测她和数论是不是真爱,给了她一个问题. 已知 给定和个数,求对取模. 按照套路,呆萌的Koishi当然假装不会做了,于是她来向你请教这 ...
- D 洛谷 P3602 Koishi Loves Segments [贪心 树状数组+堆]
题目描述 Koishi喜欢线段. 她的条线段都能表示成数轴上的某个闭区间.Koishi喜欢在把所有线段都放在数轴上,然后数出某些点被多少线段覆盖了. Flandre看她和线段玩得很起开心,就抛给她一个 ...
- 洛谷P3602 Koishi Loves Segments 贪心
正解:贪心 解题报告: 传送门! 首先在学习贪心的入门题的时候我们就知道,当x=1的时候,也就是每条线段不能相交的时候的做法——就按右端点排序然后能选就选,也就是会议安排问题,原因显然?就你选右端点更 ...
- 题解-Koishi Loves Construction
题解-Koishi Loves Construction 前缀知识 质数 逆元 暴搜 Koishi Loves Construction 给定 \(X\),\(T\) 组测试数据,每次给一个 \(n\ ...
- 洛谷 P1580 yyy loves Easter_Egg I
洛谷 P1580 yyy loves Easter_Egg I 题解: 队列+字符串 #include <cstdio> #include <string> #include ...
随机推荐
- iOS开发-编译出错 duplicate symbols for architecture x86_64
今天对原来项目文件进行重新整理,根据文件内容进行分类,结果复制粘贴时没注意把一个文件复制了两遍 编译的时候就出现Duplicate Symbol Error 在网上搜素了一圈发现也有人遇到过这个问题, ...
- SpringBoot(二)-- 支持JSP
SpringBoot虽然支持JSP,但是官方不推荐使用.看网上说,毕竟JSP是淘汰的技术了,泪奔,刚接触 就淘汰.. SpringBoot集成JSP的方法: 1.配置application.prope ...
- MongoDB 备份恢复
备份: mongodump --host -u admin -p -o /tmp/alldb/ // 备份所有的库 mongodump --host -u admin -p -d mydb -o /t ...
- HTML 注释
"<!-- xxx -->" 用于在 HTML 中插入注释,注释是用来给开发人员看的,浏览器不会显示注释内容 <!DOCTYPE HTML> <htm ...
- Python调用7zip命令实现文件批量解压
Python调用7zip命令实现文件批量解压 1.输入压缩文件所在的路径 2.可以在代码中修改解压到的文件路径和所需要解压的类型,列入,解压文件夹下面所有的mp4格式的文件 3.cmd 指的就是Pyt ...
- ORACLE常用函数汇总【转】
PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句, 函数主要分为两大类: 单行函数 ...
- Windows 7笔记本创建wifi热点供手机上网教程
Windows 7笔记本创建wifi热点供手机上网教程 | 浏览:60606 | 更新:2012-07-19 11:48 | 标签:笔记本 wifi 1 2 3 4 5 6 7 分步阅读 用智能手机的 ...
- Jquery-无法有效获取当前窗口高度
今天碰到个很奇怪的事情,那就是滚动条往下滚动时候没有触发提示,反而是往上滚动的时候,触发了提示.百思不得其解,尤其是拿了美工大大的切图过来,一点问题都没有. 那么就进行console.log输出查看了 ...
- IT零起步-CentOS6.4部署OpenVPN服务器
OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,实现二/三层的基于隧道的VPN.最早由James Yonan编写.OpenVPN允许创建的VPN使用公开密钥.数字证书.或者用户名/密码来进行 ...
- android基础---->WidGet的使用
Widget是一个可以添加在别的应用程序中的”小部件”,我们可以使用自定义的Widget远程控制我们的程序做一些事情.一般用于在桌面上添加一个小部件,现在我们开始小部件的学习. 目录导航: WidGe ...