HGOI20180904(NOIP2018模拟sxn出题)

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出题)的更多相关文章
- [NOIP2018模拟赛10.16]手残报告
[NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...
- NOIP2018 模拟赛(二十二)雅礼NOI
Preface 这次的题目都是NOI+的题,所以大家的分数都有点惨烈. 依靠T1大力骗分水到Rank2 所以想看正解的话看这里吧 A. 「雅礼NOI2018模拟赛(一) Day1」树 看一眼题目感觉十 ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
- 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 就是判断两个矩形能否互相放 ...
- 【HHHOJ】NOIP2018 模拟赛(二十四) 解题报告
点此进入比赛 得分: \(100+60+100\)(挺好的,涨了一波\(Rating\)) 排名: \(Rank\ 1\) \(Rating\):\(+115\) \(T1\):[HHHOJ13]金( ...
- [jzoj NOIP2018模拟11.02]
嗯T1忘记取模了,100到20 嗯T2忘记了那啥定理,暴力也写炸了,这题我认 嗯T3线段树合并分裂没有写炸,考场上就知道妥妥的70分.但是,分数出的时候听到有人说暴力也是70分,我???脸黑,枉我敲了 ...
- [jzoj NOIP2018模拟10.29]
OI生涯的最高分,来了纪中这么多天,在经历了这么多场“NOIP难度”的模拟赛之后,终于看到了真正的NOIP 今天考场上效率很高,很快码完了全部的题目,留下了足够的时间对拍和...发呆.不得不说看着电脑 ...
- [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)
题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...
随机推荐
- Delphi 10.3 Rio + iOS 12.1 SDK 编译错误 "libcharset.1.dylib"
环境版本: Delphi 10.3 Rio iOS 12.1 SDK Xcode 10.1 (10B61) 错误讯息:[DCC Error] E2597 ld: file not found: /us ...
- 20155320 Exp3 免杀原理与实践
20155320 Exp3 免杀原理与实践 免杀 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. [基础问题回答] (1)杀软是如何检测出恶意代码的? 1.通过行为检 ...
- POJ1080
一道字符串DP,然而不需要状压之类的玄学操作 题目大意:给你两个串,由'A','C','G','T'组成,现在你可以在这两个串中的某些位置插入'-',最终要使得它们的长度相等 给出两个字符匹配时的匹配 ...
- mfc 嵌套类
嵌套类 一. 嵌套类 嵌套类的定义 将某个类的定义放在另一个类的内部,这样的类定义,叫嵌套类. class AAA { int aaa; class BBB { int bbb; //其它成员或者函数 ...
- [Deep-Learning-with-Python]机器学习基础
机器学习类型 机器学习模型评估步骤 深度学习数据准备 特征工程 过拟合 解决机器学习问题的一般性流程 机器学习四分支 二分类.多分类以及回归问题都属于监督学习--目标是学习训练输入和对应标签之间的关系 ...
- C# Language Specification 5.0 (翻译)第六章 转换
转换使表达式可以当做一个明确的类型来加以处理.转换使得所给定类型的表达式以不同类型来处理,或使得没有某个类型的表达式获得该类型.转换可以是显式或隐式的,而这决定了是否需要显式地强制转换.比方说,从类型 ...
- LABVIEW串口通信基础
写这一篇串口通信基础的契机是最近刚刚完成一个温箱的仪器控制程序,LABVIEW通过串口与温箱单片机通讯,我打算将过程中遇到的一些问题和收获列在这里方便有需求的网友比对.寻找答案. 学LABVIEW时间 ...
- 《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力
9 发射子弹时蓄力 实现效果如下 image 按下开火键(坦克1为空格键)重置力为最小力,一直按着的时候蓄力,抬起的时候发射.如果按着的时候蓄力到最大,则自动发射,此时在抬起则不会重复发射. 首先 ...
- PTA (Advanced Level) 1001 A+B Format
1001 A+B Format Calculate a+b and output the sum in standard format -- that is, the digits must be s ...
- 《Linux内核设计与实现》第五章读书笔记
第五章 系统调用 5.1与内核通信 1. 系统调用 让应用程序受限的访问硬件设备 提供创建新进程并与已有进程通信的机制 提供申请操作系统其他资源能力是用户空间进程和硬件设备之间的中间层 2. 系统调 ...