前言

今天第一次正式C组题,不过……比较恐怖。


正题


题目1:公牛和母牛(jzoj1292)

有n头牛,可以是公牛或母牛,每头公牛之间至少得有k头母牛。求方案数。

输入输出(建议跳过)

Input

第一行:两个空格隔开的整数N(N<=100000)和K。

Output

输出一个整数表示方法总数,答案可能很大,所以只需输出mod 5,000,011的值即可。

Sample Input

4 2

Sample Output

6

解题思路

推出动态转移方程,用f[i]来表示i头牛的方案数。

f[i]=f[i−1]+1(i<=k+1)f[i]=f[i−1]+1(i<=k+1)

f[i]=f[i-1]+1 (i

f[i]=f[i−k]+f[i−1](i>k+1)f[i]=f[i−k]+f[i−1](i>k+1)

f[i]=f[i-k]+f[i-1] (i>k+1)
因为如果在i处放置了公牛那么前k个就不能放,所以是f[i-k],放母牛的话就累加之前的方案数f[i-1]

代码

#include<cstdio>
using namespace std;
int n,k,f[100001];
int main()
{scanf("%d%d",&n,&k);k++;//加f[0]=1;//初始化for (int i=1;i<=n;i++){if (i>k){f[i]=(f[i-k]+f[i-1])%5000011;//动态转移}else{f[i]=(1+f[i-1])%5000011;//动态转移}}printf("%d",f[n]);//输出
}

题目2:最短路(jzοj3777)

每个点的权值遵守以下规律

f[1][1]=1
f[i][j]=f[i-1][j]+f[i][j-1]

然后求(1,1)到(m,n)的最小权值 mod 10000000007。

输入输出(建议跳过)

Input

一行两个正整数N,M,表示图的大小。

Output

一行一个整数Ans,表示答案模1000000007后的值。

Sample Input

1 2

Sample Output

6

解题思路

杨辉三角,也就是组合,然后用快速幂求组合公式

cnm=n!m!(n−m)!cmn=n!m!(n−m)!

c_m^n=\frac{n!}{m!(n-m)!}
然后取膜的快速幂

cnm(modp)=((m!(n−m)!)∗m!(p−2)(modp)+n)(modp)cmn(modp)=((m!(n−m)!)∗m!(p−2)(modp)+n)(modp)

c_m^n(modp)=((m!(n-m)!)*m!^(p-2)(modp)+n)(modp)

代码

#include<cstdio>
#include<algorithm>
#define mod 1000000007
using namespace std;
long long n,m,s,x,y;
long long qsm(long long x,long long c)//快速幂
{long long ans=1;while (c){if (c&1) {ans=(ans*x)%mod;}x=(x*x)%mod;c>>=1;}return ans;
}
int main()
{scanf("%lld%lld",&n,&m);if (n<m) swap(n,m);x=1;y=1;for (long long i=n+2;i<=n+m+1;i++) x=(x*i)%mod;//求m!(n-m)!for (long long i=1;i<=m;i++) y=(y*i)%mod;//m!printf("%lld",(x*qsm(y,mod-2)%mod+n)%mod);//公式
}

题目3:Magical GCD(jzoj3780)

给出一个长n的序列,i到j的价值为i到j的最大公约数乘以它的长度。求最大价值

输入输出(建议无视)

Input

单个测试点包含多组数据。
输入的第一行是一个整数T表示数据组数。
每组数据的第一行是一个整数N,描述序列长度。
接下来N个数字,描述这个序列元素A[i]。

Output

对于每组测试数据输出一行,包含一个整数,表示序列最大的 Magical GCD。

Sample Input

1
5
30 60 20 20 20

Sample Output

80

解题思路

暴力枚举左到右会超时,所以我们用g[i]表示从i到r的gcd。
然后我们会发现这样会有许多重复的,只要我们过滤掉重复的gcd就好了。
所以我们先用一个右指针和左指针,发现重复时,就可以利用指针在下次枚举时无视自己

代码

#include<cstdio>
#include<iostream>
#define ll long long
using namespace std;
int ls[100001],nx[100001],t,n;
ll a[100001],g[100001],maxs;
ll gcd(ll x,ll y)//辗转相除法
{if (x%y==0) return y;else return gcd(y,x%y);
}
int main()
{scanf("%d",&t);for (int ti=1;ti<=t;ti++){maxs=0;scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%lld",&a[i]);g[i]=a[i];nx[i]=i+1;//左指针ls[i]=i-1;//右指针}for (int r=1;r<=n;r++)for (int i=1;i<=r;i=nx[i]){g[i]=gcd(g[i],a[r]);//求最大公约maxs=max(g[i]*(r-i+1),maxs);//求最大值if (g[i]==g[i-1])//发现重复{nx[ls[i]]=nx[i];//修改指针让下次无视自己ls[nx[i]]=ls[i];//同上}}printf("%lld\n",maxs);}
}

题目4:Multiset(jzoj3781)

有一个数0,有以下两种操作

让一个数增加x=x+1
将一个数分裂为两个非负整数

给出一个序列,求出至少要多少次操作才可以变为这个序列

输入输出(建议无视)

Input

第一行为一个整数N,描述最终集合的大小。
第二行为N个非负整数,为最终集合的每一个元素。

Output

输出唯一一行,Alice 最少玩的轮数。

Sample Input

Sample Input 1
1
0

Sample Input 2
4
1 1 1 1

Sample Input 3
5
0 3 0 3 0

Sample Output

Sample Output 1
0
Sample Output 2
3
Sample Output 3
5

解题思路

首先感谢纪中dalao的帮助
反推,就变成了减去1和合并这两种操作。
然后贪心:用桶w[i]来表示在第i步有多少个数会变为0

代码

#include<cstdio>
#include<iostream>
using namespace std;
int n,x,maxs,s;
int w[1000001];
int main()
{scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&x);w[x]++;//桶maxs=max(maxs,x);//记录最大值}s=w[0];//0的个数for (int i=1;i<=maxs;i++){s=(s+1)/2+w[i];//合并0并加入新的0}while (s>1) {s=(s+1)/2;maxs++;}//合并剩余部分printf("%d",maxs);//输出
}

【jzoj】2018.2.5NOIP普及组——C组模拟赛相关推荐

  1. tower(普及组多校模拟赛)

    题目 欲穷千里目,更上一层楼. 阿克先生喜欢旅游.某一天,他来到魔法森林旅游. 经过观察,他发现魔法森林一共有 n 个城市,每个城市有一座高高的魔法塔,第i 个城市的魔法塔的高度为 hi.这些城市一共 ...

  2. 牛客NOIP2021提高组OI赛前模拟赛第一场T3——与巨(数学)

    与巨 description solution code description [题目描述] 定义无穷序列f:f1=1,fn=fn−1∗2+1f:f_1=1,f_n=f_{n-1}*2+1f:f1​ ...

  3. 2021牛客NOIP提高组OI赛前模拟赛第一场T2——牛牛和数组操作(区间dp)

    牛牛和数组操作 description solution code description [题目描述] 有n + 2个整数a0, a1, . . . , an, an+1, a0 = an+1 = ...

  4. 第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-大学组-线上模拟赛-第一题-数据类型检测

    第一题-数据类型检测 这是检测输入数据类型的题目,考法在于掌握对数据类型的检测. 看到了很多题解是使用typeof和instanceof 来进行检测.因为这种关键字的检测类型个数都有限. 因此需要结合 ...

  5. JZOJ(中山纪念中学) 2018.02.02【NOIP普及组】模拟赛D组

    本次题目:2018.02.02[NOIP普及组]模拟赛D组 第一题 题目:第一题 公牛数字 题意: 求题目给出两个数字的乘积 分析: 这题明显只是考察学生的高精可我居然没做对,只要多练习几次,即可AC ...

  6. 2018年10月17日普级B组【模拟赛】

    2018年10月17日普级B组模拟赛2018年10月17日普级B组模拟赛2018年10月17日普级B组模拟赛 第一题--ISBN号码第一题--ISBN号码第一题--ISBN号码 博客链接: https ...

  7. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  8. 2020.04.08【NOIP普及组】模拟赛C组24 总结

    2020.04.08 2020.04.08 2020.04.08[ N O I P NOIP NOIP普及组]模拟赛 C C C组 24 24 24 总结 概述: 这次比赛我 A K AK AK了,拿 ...

  9. 计蒜客信息学3月普及组模拟赛

    A. 断幺九 题目链接 分值:100 时间限制:1000ms 测试点数目:10 B. 锈湖 题目链接 分值:100 时间限制:2000ms 测试点数目:10 C. 图  题目链接 分值:100 时间限 ...

最新文章

  1. Oracle分析函数入门
  2. 指定域的名称或安全标识(SID)与该域的信任信息不一致.
  3. LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串
  4. 三校生计算机模拟试题1,甘肃省2015年“三校生”考试摸拟试题1
  5. 【Qt】Qt5.12编译MySQl5.7驱动(在线亲自指导)
  6. LeetCode 342. 4的幂(位运算)
  7. mysql 不显示消息错误_如何编写不吸的错误消息
  8. 建立你第一个 Outlook Add-in
  9. eureka上的微服务不能通过服务名调用_掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地上篇...
  10. 数据库类型少_DELETE与DROP 在数据库中的使用方法和区别
  11. Ubuntu学习日记--Lesson2:创建、重命名、删除文件及文件夹,强制清空回收站方法
  12. PHP7.1 狐教程
  13. App Inventer制作蓝牙通讯软件
  14. 北京地区的图像处理公司
  15. 如何解决苹果账号续费时支付失败的问题
  16. 网页资源不知道如何下载,我来教你
  17. 【Spring】JdbcTemplate常用方法使用示例
  18. 基于强化学习与深度强化学习的游戏AI训练
  19. QPSK调制解调仿真matlab
  20. Java选择题考试系统

热门文章

  1. php输出远程文件边读边下载,php file_get_contents读取远程文件并输出
  2. 正则表达式在python中的应用_学习正则表达式在python中的应用
  3. bms中soh计算方式_BMS算法设计之电池SOH介绍(下)
  4. 7-24 树种统计 (25 分)(详解)map做法 map真香啊!
  5. [SpringBoot2]HelloWorld
  6. [mybatis]typeHandlers日期类型的处理
  7. Template Method(模板方法)--类行为型模式
  8. hash table(用乘法散列法实现)
  9. 数据结构----单源最短路径Dijkstra
  10. 基于matlab的回波,基于MATLAB回波信号产生与消除.doc