sol

输入n和H表示n个人,选H个人gcd最大
抓住排列,是x[1,n]的正整数,是连续的整数,
假设现在最大的公因数是k其中k一定是在[1,n]那么在排列中最多出现的个数为w
那么kw是最大的含有因数k的数字满足kw<=n所以k<=n/w
显然w越小答案k越大而w取值范围是[H,n]所以w=H时答案最大
所以 k(max)=n/H
由于选的序号最小那么for一遍按顺序输出即可
复杂度O(n)

# include <bits/stdc++.h>
using namespace std;
const int MAXN=;
int a[MAXN];
int main()
{
freopen("dst.in","r",stdin);
freopen("dst.out","w",stdout);
int n,k;
scanf("%d%d",&n,&k);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
int temp=n/k; printf("%d\n",temp);
int cnt=;
for (int i=;i<=n;i++)
if (!(a[i]%temp)) {
printf("%d ",i),cnt++;
if (cnt==k) break;
}
return ;
}

sol

设F[i]为斐波那契数列的第i项,显然f[i]=f[i-2]+f[i-1]
一个有趣的结论 gcd(f[a],f[b])=f[gcd([a],[b])]
证明:
设n<m,设第f(n)与f(n+1)为a,b,则有:
首先 证明:gcd(F[n+1],F[n])=1;
辗转相减法:
gcd(F[n+1],F[n])
=gcd(F[n+1]-F[n],F[n])
=gcd(F[n],F[n-1])
=gcd(F[2],F[1])
=1

x     f(x)

5
...
n a
n+1 b
n+ a+b
n+ a+2b
n+ 2a+3b
n+ 3a+5b
...
m f[m-n-1]a+f[m-n]b

因为gcd(m,n)=gcd(n,m%n)

所以 gcd(f(m),f(n))=gcd(f(n),f(m)%f(n))=gcd(a,f(m-n)b)

a,b相邻 gcd(a,b)=1;

f(n)=a【逃这应该看得出来吧】
gcd(f(m),f(n))=gcd(f(n),f(m-n))
辗转相减法 就是gcd(f(n),f(m%n))
辗转相除法 就是f(gcd(n,m))
对于20%的数据,0<n,m<100000 随便线性推一推就行
对于60%的随机数据 ,找到规律线性递推求斐波那契数列即可
对于100%的数据 n,m<=10^14,找到规律,用矩阵快速幂优化递推就行
单位矩阵这样的:

f[i-] f[i-]             f[i] f[i-]
                                  

复杂度O(log n)

# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mo=,MAXN=;
struct Node{
ll m[][];
};
Node tt;
ll gcd(ll a,ll b)
{
return b==?a:gcd(b,a%b);
}
Node mul(Node a,Node b)
{
Node t;
for (int i=;i<=;i++)
for (int j=;j<=;j++)
{
ll sum=;
for (int k=;k<=;k++)
sum=(sum+a.m[i][k]*b.m[k][j]%mo)%mo;
t.m[i][j]=sum%mo;
}
return t;
}
Node pow(Node x,ll n)
{
if (n==) return tt;
Node t=pow(x,n/);
t=mul(t,t);
if (n%==) t=mul(t,x);
return t;
}
int main()
{
freopen("st.in","r",stdin);
freopen("st.out","w",stdout);
/*
f[] a,b g=gcd(a,b);
f[g]=gcd[f[a],f[b]];
*/
ll n,m; scanf("%lld%lld",&n,&m);
if (n>m) swap(n,m);
ll g=gcd(n,m);
if (g==1ll||g==2ll) {
printf("1\n");
return ;
}
Node k;
k.m[][]=,k.m[][]=;
k.m[][]=;k.m[][]=;
tt=k;
Node w=pow(k,n-);
printf("%lld\n",w.m[][]%mo);
return ;
}

sol

错排问题的模板问题
假设A...为信封,a...为信件
我假设把a放B里,显然是一个错放,在这里我们可以看到这个错误出现的类型有两大类:(
就是导致这个错放的原因)

  • b错放到A里,此时,b错放到A;a错放到B;后面的C..和A,B没有关系了,后面n-2个信封全错排 就是f(n-2)
  • b错放到除了A、B之外的一个信封,剩下的n-1个信封全错排就能符合条件放法总数为f(n-1)

  总而言之,在a错放到B里,共有错放法:f(n-2)+f(n-1)这么多种,
在a错放到C,错放到D……(n-1)种可能的情况下,同样有f(n-2)+f(n-1)种错放法,因此得出错放总数为
   f(n)=(n-1){f(n-2)+f(n-1)}

复杂度O(n)

# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mo=1e9+,MAXN=;
ll f[MAXN];
int main()
{
freopen("jdt.in","r",stdin);
freopen("jdt.out","w",stdout);
int n;
while(~scanf("%d",&n)) {
f[]=;f[]=;
for (int i=;i<=n;i++)
f[i]=(i-)*((f[i-]+f[i-])%mo)%mo;
printf("%lld\n",f[n]);
}
return ;
}

二项式反演

上个公式:

f(n)表示n个数的全排列,即 f(n)=n!
g(i)有n个信封中有i个信封错排,g(n)就是我们要求的结果。

f(n)= C(n,0)g(0) + C(n,1) g(1) ….+C(n,n) * g(n)
从n里面选0,1,2...n错排总数和就是全排列
因为对于全排列有2种可能:
1.正确摆放 (1)
2.有i个错误摆放 (0<i<=n)
归纳一下就是有i个错误摆放 (0=<i<=n)

反演一下就ok
g(n)=∑(-1)^(n-i) * C(n,i) * i! (从0到n)
C(n,i)的时候暴力搞一下逆元。

复杂度O(n)

std是这种方法:

#include <cstdio>
#include <algorithm>
#include <iostream>
#define LL long long
using namespace std;
int n;
const LL MOD=1e9+;
const int MAXN=;
LL f[MAXN],t[MAXN];
void fff(){
freopen("jdt.in","r",stdin);
freopen("jdt.out","w",stdout);
}
void fction(){
f[]=;
for (int i=;i<=;i++)f[i]=(f[i-]*i)%MOD;
t[]=t[]=;
for (int i=;i<=;i++)t[i]=((MOD-MOD/i)%MOD)*(t[MOD%i]%MOD)%MOD;
for (int i=;i<=;i++) t[i]=(t[i]*t[i-])%MOD;
}
int main(){
fff();
fction();
while (scanf("%d",&n)!=EOF){
LL ans=;
LL flag=n&?-:;
for (int i=;i<=n;i++){
ans=(ans+(flag*1ll*((f[n]%MOD)*t[n-i])%MOD))%MOD;
flag=-flag;
}
ans=(ans+MOD)%MOD;
printf("%lld\n",ans);
}
}

HGOI20180904(NOIP2018模拟sxn出题)的更多相关文章

  1. [NOIP2018模拟赛10.16]手残报告

    [NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...

  2. NOIP2018 模拟赛(二十二)雅礼NOI

    Preface 这次的题目都是NOI+的题,所以大家的分数都有点惨烈. 依靠T1大力骗分水到Rank2 所以想看正解的话看这里吧 A. 「雅礼NOI2018模拟赛(一) Day1」树 看一眼题目感觉十 ...

  3. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  4. EZ 2018 06 10 NOIP2018 模拟赛(十八)

    好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...

  5. HGOI20180831 NOIP2018模拟

    input1: 4 4 4 4 4 3 2 4 5 4 5 5 5 1 7 3 2 output1: Yes Yes Yes No 好的吧数学题QwQ考场上没人做出来qwq 就是判断两个矩形能否互相放 ...

  6. 【HHHOJ】NOIP2018 模拟赛(二十四) 解题报告

    点此进入比赛 得分: \(100+60+100\)(挺好的,涨了一波\(Rating\)) 排名: \(Rank\ 1\) \(Rating\):\(+115\) \(T1\):[HHHOJ13]金( ...

  7. [jzoj NOIP2018模拟11.02]

    嗯T1忘记取模了,100到20 嗯T2忘记了那啥定理,暴力也写炸了,这题我认 嗯T3线段树合并分裂没有写炸,考场上就知道妥妥的70分.但是,分数出的时候听到有人说暴力也是70分,我???脸黑,枉我敲了 ...

  8. [jzoj NOIP2018模拟10.29]

    OI生涯的最高分,来了纪中这么多天,在经历了这么多场“NOIP难度”的模拟赛之后,终于看到了真正的NOIP 今天考场上效率很高,很快码完了全部的题目,留下了足够的时间对拍和...发呆.不得不说看着电脑 ...

  9. [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...

随机推荐

  1. python_基础语法

    开始正式接触python的语法: 1. 2.

  2. 1.5《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——清屏

    使用命令行时,使用clear命令清除屏幕非常方便: $ clear 键盘简写为^L.(Ctrl + L) 同样地,使用完终端当前窗口或标签页,使用exit命令退出进程: $ exit 键盘简写为^D ...

  3. Centos 发送smtp邮件

    说明:          1.本文是用网易smtp服务,QQ的没试过        2.在Centos7上测试 实现:        1.关闭本机的sendmail服务或者postfix服务     ...

  4. 解决 idea 中的 tomcat控制台 和cmd tomcat下的中文乱码问题(win10 64位)

    原理:idea控制台里的日志默认是从tomcat的localhost.log 和 catalina.log 两个文件中读出来的. https://blog.csdn.net/zhaijingkui/a ...

  5. Django实现websocket完成实时通讯、聊天室、在线客服等

    一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebS ...

  6. 解决Docker容器时区及时间不同步的问题

    前几天在测试应用的功能时,发现存入数据库中的数据create_time或者update_time字段总是错误,其他数据都是正常的,只有关于时间的字段是错误的. 进入linux服务器中查看,也没有任何的 ...

  7. 有关ADO.NET基础中的基础的熟悉过程

    现在对于ADO.NET基础的理解与记忆并不严谨和完善 所以,只写一点关于自己的理解,嗯,一种去转换思维理解的方法吧,算是吧 希望各位前辈或者同学,积极指出其中的错误和偏差 个人对于刚接触的ADO.NE ...

  8. MongoDB的账户与权限管理及在Python与Java中的登录

    本文主要介绍了MongoDB的账户新建,权限管理(简单的),以及在Python,Java和默认客户端中的登陆. 默认的MongoDB是没有账户权限管理的,也就是说,不需要密码即可登陆,即可拥有读写的权 ...

  9. Redis简介与Memcached的比较

    Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的 ...

  10. Jq_Js_Js、Jq获取浏览器和屏幕各种高度宽度

    $(document).ready(function()         {alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).he ...