NOIP2017提高组 模拟赛15(总结)

第一题 讨厌整除的小明

【题目描述】

  小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的数,认为那些数会分解数字k从而破坏掉k的美感……

  有一天,他想:如果所有人都和自己一样,那么是不是喜欢两个含有倍数关系的不同数字的人就不能做朋友了?于是他想,至少用多少个集合,才能包括1到n的所有n个整数,使得所有存在倍数关系的两个不同数字在不同的集合里面?

  小明脑子不好使,于是把问题交给了你。



【输入格式】

  第一行一个数字q,表示询问次数

  接下来q行,每一行一个数字n,表示问题中的n。

【输出格式】

  共q行,每行一个数字,表示数字n对应的问题的答案。

【输出样例】

2

7

10

【输出样例】

3

4

【解题思路】

  其实就是求\(2^T≤n\)中最大的T值,答案即为T+1。

  为什么?

列个次方表:

|次方|0|1|2|3|4|5|

|-|-|-|-|-|-|

|2|1|2|4|8|16|32|

|3|1|3|9|27|81|243|

|5|1|5|25|125|625|3125|

  如此图排列,那么质数\(pi^k\)已经处理好,那合数呢?

  设合数\(X=p1^{k1}*p2^{k2}*p3^{k3}*……*pn^{kn}\)

  X可以放在第(k1+k2+k3+……+kn)列里,则一定不会有倍数关系。

  因为自然数X分解成质因数只会有一种方案。

  假设Y=KX(K>1),且X,Y在同一列。

  那么∑p(Y)=∑p(K)+∑p(X),K>1所以∑p(K)>0。

  所以X,Y不可能在同一列。

  又可以知道∑q≤T。(最大的次方数不超过T)

  求出T即可。时间复杂度O(q log n)

【代码】

#include<cstdio>
#include<algorithm> using namespace std; typedef long long ll; int T;
ll n; int main()
{
freopen("2057.in","r",stdin);
freopen("2057.out","w",stdout);
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n); int s=0;
while(n) { n>>=1; s++; }
printf("%d\n",s);
}
return 0;
}

第二题 山高 (原题 bzoj3193 地形生成)

【题目描述】

  有n座山,每座山有一个高度和关键数字。

  现将这n座山排成一排,要求对于每座山排在其前面且比它高的山的数量小于它的关键数字。

  询问不同的标号序列和等高线序列的数量是多少。

  标号序列就是按顺序写下每座山的标号,等高线序列就是按顺序写下它们的高度。

【输入格式】

  第一行一个整数n。

  接下来n行每行两个整数表示每座山的高度和关键数字。

【输出格式】

  两个整数表示不同的标号序列的数量和不同的等高线序列的数量。

  答案对2011取模。

【输出样例】

2

2 2

2 2

【输出样例】

2 1

【数据规模】

  1 <= n <= 1000,所有数字不大于 1000000000,

  对于30%的数据, 1 <= n <= 100

【解题思路】

  假如没有相同高度的山就好做了……

  题目的si是小于,si--,化成小于等于。

  先从大到小排序,高度hi相等的关键字si小的在前。

  先把同一高度的提取出来。

  对于一段高度相同的山,第1个为i,最后一个为t。

 先考虑第一个答案:

  那么第j(i≤j≤t)座山可选取的范围就是min(i,sj+1)+j-i,所有的山的范围乘起来就是答案。

  1 2 3 4 5…i…j…t,j可以放在i之前的山(它们都高过j)的后面,一共有i种(第0座山到第i-1座山的后面,还要和sj+1取min),还可以放在相等的山的后面,也就是j-i。所以山j的范围是min(i,sj+1)+j-i。

 考虑第二个答案:

  因为相同的山即使标号不同也只记做一种方案。

  所以,相同的山一定是从前往后放的。也就是相同的山i,i+1,i一定放在i+1之前。

  列出dp方程:dp[i][j]表示第i个相同的山,放在第j个山(之前的山,不与当前山等高)的后面的方案数。

  \(dp[i][j]=\sum_{k=0}^{j}dp[i-1][k]\)

  j是有序的,也就是si。

  可以用前缀和优化,dp[i][j]=dp[i][j-1]+dp[i-1][j];

  f[j]=dp[1~i][j],表示当前山放在第j座山后面的方案数。

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

【代码】

#include<cstdio>
#include<algorithm> #define imin(a,b) ((a<b)?(a):(b)) using namespace std; typedef long long ll; const int N=1200;
const int mods=2011;
int n,ans1,ans2,f[N];
struct data { int h,s; } d[N]; bool cmp(data A,data B) { return (A.h>B.h || (A.h==B.h && A.s<B.s)); } int main()
{
freopen("2239.in","r",stdin);
freopen("2239.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d",&d[i].h,&d[i].s),d[i].s--;
sort(d+1,d+1+n,cmp); ans1=ans2=1;
for(int i=1;i<=n;)
{
int t=i,mk;
while(d[t+1].h==d[t].h && t<n) t++;
for(int j=1;j<=n;j++) f[j]=0;
f[0]=1;
for(int j=i;j<=t;j++)
{
ans1=ans1*((imin(i,d[j].s+1)+j-i)%mods)%mods;
mk=imin(i-1,d[j].s);
for(int k=1;k<=mk;k++) f[k]=(f[k]+f[k-1])%mods;
}
int tmp=0; mk=imin(i-1,d[t].s);
for(int j=0;j<=mk;j++) tmp=(tmp+f[j])%mods;
ans2=ans2*tmp%mods;
i=t+1;
}
printf("%d %d\n",ans1,ans2);
return 0;
}

第三题 ABA字符串 (原题 bzoj3620 似乎在梦中见过的样子)

【题目描述】

  给出一个长度为n的字符串(均为小写字母),以及一个整数k。

  问该字符串的所有子串中,能被切分为A+B+A的形式且 len(A) >= k, len(B) >= 1 的子串数量有多少。

【输入格式】

  第一行一个字符串

  第二行一个整数k

【输出格式】

  一个整数表示答案。

【输出样例】

abcabcabc

2

【输出样例】

8

【解题思路】

  暴力O(n²)的KMP,没什么好说的……(其实是懒得写了)

【代码】

#include<cstring>
#include<algorithm>
#include<cstdio> using namespace std; const int N=10010;
char sd[N],*st;
int n,m,ans;
int ne[N],mi[N]; int main()
{
freopen("2240.in","r",stdin);
freopen("2240.out","w",stdout);
scanf("%s",sd);
scanf("%d",&m);
n=strlen(sd); st=sd;
int nt=n;
for(int w=1;w<nt;w++)
{
ne[0]=ne[1]=mi[0]=mi[1]=0; int k=0;
for(int i=2;i<=n;i++)
{
while(k>0 && st[i-1]!=st[k]) k=ne[k];
if(st[i-1]==st[k]) k++;
ne[i]=k; mi[i]=k;
if(mi[ne[i]]>=m) mi[i]=mi[ne[i]];
if(mi[i]>=m && (mi[i]<<1)<i) ans++;
}
st=st+1; n--;
}
printf("%d\n",ans);
return 0;
}

NOIP2017提高组 模拟赛15(总结)的更多相关文章

  1. NOIP2017提高组 模拟赛13(总结)

    NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...

  2. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  3. NOIP2017提高组模拟赛 8(总结)

    NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...

  4. NOIP2017提高组模拟赛 9 (总结)

    NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...

  5. NOIP2017提高组模拟赛 7(总结)

    NOIP2017提高组模拟赛 7(总结) 第一题 斯诺克 考虑这样一个斯诺克球台,它只有四个袋口,分别在四个角上(如下图所示).我们把所有桌子边界上的整数点作为击球点(除了4个袋口),在每个击球点我们 ...

  6. NOIP2017提高组模拟赛5 (总结)

    NOIP2017提高组模拟赛5 (总结) 第一题 最远 奶牛们想建立一个新的城市.它们想建立一条长度为N (1 <= N <= 1,000,000)的 主线大街,然后建立K条 (2 < ...

  7. NOIP2017提高组模拟赛4 (总结)

    NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...

  8. 计蒜客NOIP2017提高组模拟赛(三)day1

    火山喷发 火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 n 个生物分别具有 A​1​​,A​2​​,⋯,A​n​​点生命值,一次火山喷发总计 MM 轮 ...

  9. 计蒜客NOIP2017提高组模拟赛(四)day1

    T1:小X的质数 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小 X 认为,质数是一切自然数起源的地方. 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的 ...

随机推荐

  1. 【DataStructure】The difference among methods addAll(),retainAll() and removeAll()

    In the Java collection framework, there are three similar methods, addAll(),retainAll() and removeAl ...

  2. Navicat 连接 Mysql 报2059错误的原因以及解决方法

    MySQL的8.0.*版本使用的是caching_sha2_password验证方式,而Navicat Premium 12还不支持该种方式.解决方案: 1,降低mysql的版本 2,设置mysql支 ...

  3. Fine-tuning CaffeNet for Style Recognition on “Flickr Style” Data 数据下载遇到的问题

    (下载的时候没有提示 不知道是正在下 还是出现错误 卡着了)..一直没有反应 下载前要以管理员身份运行 sudo su 再 python examples/finetune_flickr_style/ ...

  4. 关于swift构造方法

    switf 中如果遇到这样的错,,,大概错误就是,"必须要调用父类的构造方法",,可是呢,,调用了super.init()  不就是调用了构造方法了吗? 结果上去一查,,结果一名外 ...

  5. FFmpeg 移植 Android

    近期项目需要解析苹果的HLS流媒体协议,而FFmpeg从0.11.1“Happiness”版本开始,才增加了对HLS协议的支持.目前网上关于FFmpeg编译移植的文章有很多,但大多都是对旧版本的说明. ...

  6. android编译ffmpeg+x264

    下载最新版的x264ftp://ftp.videolan.org/pub/videolan/x264/snapshots/1.解压到指定的目录2.切换当前目录为该目录3.创建一个shell脚本buil ...

  7. java实现sql批量插入参数

    背景: 需要更新一些不规范的时间格式,如将某个时间格式化为yy-MM-dd,实际上为 yy-MM-dd hh:mm:ss,并且需要提供回滚脚本. 例如:规范化时间的脚本如下: ,) WHERE tes ...

  8. PHP 环境搭建工具

    PHP环境搭建工具 一键集成工具 直接安装后部署到相关目录即可浏览 phpStudy 下载地址:https://pan.baidu.com/s/1i6C3Ph7

  9. js从数组中取出n个不重复的数据

    /** * 首先,针对这个数组做一个去重处理,避免你在后面取数据的时候,因为取到相同的元素而又要多去取一次随机数 * 将获取到的不重复的数组,再到这里样本里面去取随机数 * 每取到一次,就将这个元素从 ...

  10. Activity-任务栈和启动模式

    为什么需要了解关于Activity的任务栈,其实最直接的体现就是提高用户交互友好性. 举个例子,当我们去浏览一个新闻客户端的时候,我们进入了新闻详情页,在这个页面有相隔两条的新闻标题,当我们去点击这个 ...