[toc]
CF293B Distinct Paths=JZOJ 4012
CF261E Maxim and Calculator=JZOJ 4010

JZOJ 2292 PPMM

题目

满足队列出入队,还要全部取反或者输出队列最大数


分析

首先全部取反也就是输出队列最小值的相反数

所以最理想的方法就是单调队列

也可以用带$log$的数据结构维护,但是容易被卡掉,

这里用树状数组,但是树状数组不满足删除,所以就把下标旋转,跑的还是挺快的


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=2000011,inf=2147483647;
int n,cur,now,op,ges,cmin[N],cmax[N];
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline void Min(int &x,int y){if (x>y) x=y;}
inline void Max(int &x,int y){if (x<y) x=y;}
inline void add(int x,int y){for (;x<=now;x+=-x&x) Min(cmin[x],y),Max(cmax[x],y);}
inline signed qmin(int x){
rr int ans=inf;
for (;x;x-=-x&x) Min(ans,cmin[x]);
return ans;
}
inline signed qmax(int x){
rr int ans=-inf;
for (;x;x-=-x&x) Max(ans,cmax[x]);
return ans;
}
inline void Pop(){if (cur<=now) --now;}
inline void Push(int x){add(--cur,x*op);}
inline void Fan(){if (cur<=now) op*=-1,ges^=1;}
inline void Gax(){
if (cur<=now){
rr int ans=op*(ges?qmin(now):qmax(now));
if (ans<0) putchar('-'),print(-ans);
else print(ans);
putchar(10);
}
}
signed main(){
n=iut(),cur=n+1,now=n,op=1;
for (rr int i=1;i<=n;++i) cmin[i]=inf,cmax[i]=-inf;
for (rr int i=1;i<=n;++i){
rr char c=getchar(); rr bool flag=0;
while (c!='P'&&c!='M') c=getchar();
switch (c=getchar()){
case 'O':Pop(),flag=1;break;
case 'U':Push(iut()); break;
case 'I':Fan(); break;
case 'A':Gax(); break;
}
if (flag) c=getchar();
}
return 0;
}

JZOJ 4012 Distinct Paths

题目

有一个$n*m$的木板,一些块已经被涂上给出的$k$种颜色中的一种。

你需要把每个没涂色的块涂色使得从左上角到右下角的每条路径都不会经过两个颜色一样的块。路径只能向右或向下走。


分析

首先这道题就是$n+m-1>k$肯定不可能的,所以其实就是搜索,但是要有技巧的剪枝


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int mod=1000000007;
int g[11][11],a[11][11];
int cnt[11],xo[1024],n,m,k;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline signed dfs(int x,int y){
if (y==m+1) ++x,y=1;
if (x==n+1) return 1;
rr int S=g[x-1][y]|g[x][y-1],ans=0,sing=-1;
if (n+m-x-y+1>k-xo[S]) return 0;
for (rr int i=0;i<k;++i)
if (!(S&(1<<i))&&((!a[x][y])||(a[x][y]==i+1))){
++cnt[i+1],g[x][y]=S|(1<<i);
if (cnt[i+1]==1){
if (sing==-1) sing=dfs(x,y+1);
ans=mo(ans,sing);
}else ans=mo(ans,dfs(x,y+1));
--cnt[i+1];
}
return ans;
}
signed main(){
for (rr int i=1;i<1024;++i) xo[i]=xo[i&(i-1)]+1;
n=iut(),m=iut(),k=iut();
if (n+m>k+1) return !putchar(48);
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=m;++j) ++cnt[a[i][j]=iut()];
return !printf("%d",dfs(1,1));
}

JZOJ 4010 Philips and Calculator

题目

可以用$x$次操作后选取$y$次$1\sim x$的可以相同的数相乘,但要保证$x+y\leq p$,问$[l\sim r]$有多少数能够这样被得到


分析

首先$x<p$所以可以把$2\sim p-1$的质数预处理,然后用这些数构造$1\sim r$的能够被乘出来的数进行dp

赛时想到应该是质因数个数+最大质因数,然而并不是,就以$64=26=43=8^2$为例,选择$4+3=7$答案更小

所以就$dp$,设$dp[n]$表示$n$所需要表示的最小步数,那么$dp[n]=\min{dp[n/i]+1}$,时间复杂度$O(pn)$,还要注意优化


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int prime[25]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
const int N=3000011; int l,r,p,ans,tot,bac,dp[N],a[N]; bool v[N];
inline void dfs(int dep,int now){
a[++tot]=now;
for (rr int i=dep;i<=bac;++i)
if (now<=r/prime[i])
dfs(i,now*prime[i]);
}
signed main(){
scanf("%d%d%d",&l,&r,&p);
if (p==1||p==2) return !putchar(48);
for (bac=24;prime[bac]>=p;--bac);
dfs(0,1),sort(a+1,a+1+tot),v[1]=1;
for (rr int i=2;i<=tot;++i) dp[i]=1e9;
for (rr int i=2;i<=p;++i)
for (rr int k=1,j=i;k<=tot;++k){
if (dp[k]+i+1>p) continue;
for (;j<=tot&&a[j]!=a[k]*i;++j);
if (j>tot) break;
if (dp[j]>dp[k]+1) dp[j]=dp[k]+1;
if (a[j]<l||v[j]||dp[j]+i>p) continue;
++ans,v[j]=1;
}
return !printf("%d",ans);
}

2020.02.05【NOIP提高组】模拟A 组的更多相关文章

  1. 纪中集训2020.02.05【NOIP提高组】模拟B 组总结反思——【佛山市选2010】组合数计算,生成字符串 PPMM

    目录 JZOJ2290. [佛山市选2010]组合数计算 比赛时 之后 JZOJ2291. [佛山市选2010]生成字符串 比赛时 之后 JZOJ2292. PPMM 比赛时 之后 JZOJ2290. ...

  2. 【纪中集训】2019.08.02【NOIP提高组】模拟 A 组TJ

    \(\newcommand{\RNum}[1]{\uppercase\expandafter{\romannumeral #1\relax}}\) T1 一道可以暴力撵标算的题-- Descripti ...

  3. JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

    题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...

  4. [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)

    传送门 Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n. ...

  5. 2020牛客NOIP赛前集训营-普及组(第二场)A-面试

    面 试 面试 面试 题目描述 牛牛内推了好多人去牛客网参加面试,面试总共分四轮,每轮的面试官都会对面试者的发挥进行评分.评分有 A B C D 四种.如果面试者在四轮中有一次发挥被评为 D,或者两次发 ...

  6. 2020牛客NOIP赛前集训营-普及组(第二场) 题解

    目录 T1 面试 描述 题目描述 输入描述: 输出描述: 题解 代码 T2 纸牌游戏 描述 题目描述 输入描述: 输出描述: 题解 代码 T3 涨薪 描述 题目描述 输入描述: 输出描述: 题解 代码 ...

  7. JZOJ 2020.02.01【NOIP提高组】模拟A 组

    2020.02.01[NOIP提高组]模拟A 组 二月份第一场比赛 闲话 惨烈啊! 50+30+0=80分 一题都没A 唉 最高150? \(zzh\) 暴虐A组 总结: 若干新东西 \(T1\) 我 ...

  8. JZOJ 2020.02.16【NOIP提高组】模拟A 组

    2020.02.16[NOIP提高组]模拟A 组 呼呼呼呼呼呼呼呼 今天暴力分可真多啊 第一次 \(A\) 组进前 \(5\) ! 呼呼呼呼呼呼呼呼 总有人虐场,总有人在场中被虐······ 总结 3 ...

  9. JZOJ 2020.01.11【NOIP提高组】模拟B组

    2020.01.11[NOIP提高组]模拟B组 今天的题是不是和 \(C\) 组放错了? 呵呵 然,却只有 \(300\) 分 首先,\(T4\) 看错题了 后,一时想不到正解 讨论区,一看,三个字- ...

  10. SX【2020.01.09】NOIP提高组模拟赛(day1)

    [2020.01.09]NOIP提高组模拟赛(day1) 这次考得不理想,只做了前两题,后两题没时间做,说明做题速度偏慢. source : 100 + 20 + 0 + 0 = 120 rank7 ...

随机推荐

  1. 硬件开发笔记(七): 硬件开发基本流程,制作一个USB转RS232的模块(六):创建0603封装并关联原理图元器件

    前言   有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了贴片电阻电容0603芯片封装,创建 ...

  2. 【C++ OOP 01】封装

    封装 封装的意义 封装是C++面向对象三大特性之一 封装的意义: 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制 封装意义一 ​ 在设计类的时候,属性和行为写在一起,表现事物 语 ...

  3. C++ 模板的笔记2

    C++模板的笔记2 关于可变参函数模板借鉴了一部分笔记,感谢大佬 类模板中的嵌套 类模板可以嵌套其他类模板,就像普通类可以嵌套其他普通类一样.嵌套的类模板可以访问外部类模板的成员,包括私有成员. 示例 ...

  4. 5、mysql优化--索引使用情况、索引的结构

    避免索引失效 1). 全值匹配 ,对索引中所有列都指定具体值. 2). 最左前缀法则 如果索引了多列,要遵守最左前缀法则.指的是查询从索引的最左前列开始,并且不跳过索引中的列. 3). 范围查询右边的 ...

  5. Failed to collect dependencies at com.oneconnect......-Intellij-IDEA-使用maven打包采坑记录

    一.问题由来 由于刚开始使用Intellij-IDEA,使用不是很熟练,因此使用过程中出现各种各样的问题.最近开发过程中,准备使用IDEA打包项目发布到测试服务器,报错信息如下: Failed to ...

  6. npm包(npm install --legacy-bundling) 通过npm-pack-all 打包tgz,放到内网(不联网)nexus发布(npm publish)

    npm包(npm install --legacy-bundling) 通过npm-pack-all 打包tgz,放到内网(不联网)nexus发布(npm publish) 需求 内网不联网,安装指定 ...

  7. 基于Apollo3 Blue MCU芯片的可穿戴产品解决方案开发之健康手环源码解析

    一 前记 健康手环是Apollo3 Blue的一个主打业务,也是该芯片最适合做的产品,在健康穿戴设备领域,该芯片有着对场景的透彻理解和技术的深厚积累. 二 源码分析 协议栈初始化: exactle_s ...

  8. day16--Java常用类04

    Java常用类 4.字符串相关类练习 4.1StringBuilder练习 package li.normalclass.stringbuilder; public class TestBuffer ...

  9. github拉项目显示timeOut

    参考:https://blog.csdn.net/qq_37424778/article/details/132018804 自己尝试在github上拉项目,但是报错LibreSSL SSL_read ...

  10. 10_PCM转WAV

    播放器是无法直接播放PCM的,因为播放器并不知道PCM的采样率.声道数.位深度等参数.当PCM转成某种特定的音频文件格式后(比如转成WAV),就能够被播放器识别播放了. 本文通过2种方式(命令行.编程 ...