洛谷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 ...
随机推荐
- 设置开机自启动VirtualBox虚拟机系统
如果常用VirtualBox虚拟机系统的话,设置个随开机启动也是很方便的.不需要打开VirtualBox窗口,直接就是系统启动了. 又继续上网搜索学习了.(设置开机自启动VirtualBox虚拟机系统 ...
- Linux命令之乐--iconv
用法: 实际应用: 批量转换文件编码: [root@wls12c PCK]$ for tfile in `ls -l|awk '{print $9}'`;do echo "iconv -f ...
- Matlab练习——寻找完全数
clc; clear; wq = []; : sum = ; k = ; : i / sum = sum + j; end end == i wq=[wq i]; end end disp(['2至1 ...
- thinkphp5.0 输入变量
可以通过Request对象完成全局输入变量的检测.获取和安全过滤,支持包括$_GET.$_POST.$_REQUEST.$_SERVER.$_SESSION.$_COOKIE.$_ENV等系统变量,以 ...
- 【swagger学习】.net WebApi中使用swagger
我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问 ...
- 【开源整理】.Net开源项目资源大全
汇总了.NET平台开源的工具类库,新的内容在不断更新中.内容借鉴了博客园.伯乐在线.GitHub等平台. (注:下面用 [$] 标注的表示收费工具,但部分收费工具针对开源软件的开发/部署/托管是免费的 ...
- Win8交互UX——用于 Windows 的触摸交互
用于 Windows 的触摸交互 Windows 8.1 提供一组在整个系统中使用的简单触摸交互功能.一致地应用此触摸语言可让用户对你的应用感觉已经很熟悉.通过让你的应用更容易学习和使用,可提高用 ...
- 【Java基础】System的arraycopy方法拷贝数组
一.在System类中查看方法的定义 二.示例 public class SystemArrayCopyTest { /** * @Description: System的arrayCopy方法测试 ...
- 关于SQL优化(转载,格式有调整)
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
- Android 应用内切换语言
extends :http://bbs.51cto.com/thread-1075165-1.html,http://www.cnblogs.com/loulijun/p/3164746.html 1 ...