2020.02.05【NOIP提高组】模拟A 组
[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 组的更多相关文章
- 纪中集训2020.02.05【NOIP提高组】模拟B 组总结反思——【佛山市选2010】组合数计算,生成字符串 PPMM
目录 JZOJ2290. [佛山市选2010]组合数计算 比赛时 之后 JZOJ2291. [佛山市选2010]生成字符串 比赛时 之后 JZOJ2292. PPMM 比赛时 之后 JZOJ2290. ...
- 【纪中集训】2019.08.02【NOIP提高组】模拟 A 组TJ
\(\newcommand{\RNum}[1]{\uppercase\expandafter{\romannumeral #1\relax}}\) T1 一道可以暴力撵标算的题-- Descripti ...
- JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会
题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...
- [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)
传送门 Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n. ...
- 2020牛客NOIP赛前集训营-普及组(第二场)A-面试
面 试 面试 面试 题目描述 牛牛内推了好多人去牛客网参加面试,面试总共分四轮,每轮的面试官都会对面试者的发挥进行评分.评分有 A B C D 四种.如果面试者在四轮中有一次发挥被评为 D,或者两次发 ...
- 2020牛客NOIP赛前集训营-普及组(第二场) 题解
目录 T1 面试 描述 题目描述 输入描述: 输出描述: 题解 代码 T2 纸牌游戏 描述 题目描述 输入描述: 输出描述: 题解 代码 T3 涨薪 描述 题目描述 输入描述: 输出描述: 题解 代码 ...
- JZOJ 2020.02.01【NOIP提高组】模拟A 组
2020.02.01[NOIP提高组]模拟A 组 二月份第一场比赛 闲话 惨烈啊! 50+30+0=80分 一题都没A 唉 最高150? \(zzh\) 暴虐A组 总结: 若干新东西 \(T1\) 我 ...
- JZOJ 2020.02.16【NOIP提高组】模拟A 组
2020.02.16[NOIP提高组]模拟A 组 呼呼呼呼呼呼呼呼 今天暴力分可真多啊 第一次 \(A\) 组进前 \(5\) ! 呼呼呼呼呼呼呼呼 总有人虐场,总有人在场中被虐······ 总结 3 ...
- JZOJ 2020.01.11【NOIP提高组】模拟B组
2020.01.11[NOIP提高组]模拟B组 今天的题是不是和 \(C\) 组放错了? 呵呵 然,却只有 \(300\) 分 首先,\(T4\) 看错题了 后,一时想不到正解 讨论区,一看,三个字- ...
- SX【2020.01.09】NOIP提高组模拟赛(day1)
[2020.01.09]NOIP提高组模拟赛(day1) 这次考得不理想,只做了前两题,后两题没时间做,说明做题速度偏慢. source : 100 + 20 + 0 + 0 = 120 rank7 ...
随机推荐
- r0capture 原理分析
r0capture 是比较好用的抓包工具 仅限安卓平台,测试安卓7.8.9.10.11.12 可用 : 无视所有证书校验或绑定,不用考虑任何证书的事情: 通杀TCP/IP四层模型中的应用层中的全部协议 ...
- 3D环饼图
// <div class="AnalysisAccCom"> <first-title title="分析对象统计"> ...
- libmatio开发笔记(一):matlab文件操作libmatio库介绍,编译和基础Demo
前言 Qt可通过matlab的库对mat文件进行读写,第三方库matio也可以对mat文件进行读写,其已经支持mat文件的7.3版本. libmatio库介绍 matio软件包含一个用于读 ...
- 【LeetCode回溯算法#03】电话号码的字母组合(数字映射字母)
电话号码的字母组合 力扣题目链接(opens new window) 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任 ...
- 如何优化好UITableView,值得思考
如果你觉得 UITableViewDelegate 和 UITableViewDataSource 这两个协议中有大量方法每次都是复制粘贴,实现起来大同小异:如果你觉得发起网络请求并解析数据需要一大段 ...
- 【Azure Developer】use @azure/arm-monitor sdk 遇见 ManagedIdentityCredential authentication failed.(status code 500)
问题描述 在使用 @azure/arm-monitor sdk 创建 MonitorClient对象时候,遇见错误 ManagedIdentityCredential authentication f ...
- 用 NetworkX + Gephi + Nebula Graph 分析<权力的游戏>人物关系(下篇)
在上一篇[1]中,我们通过 NetworkX 和 Gephi 展示了<权力的游戏>中的人物关系.在本篇中,我们将展示如何通过 NetworkX 访问图数据库 Nebula Graph. N ...
- 从零开始学Spring Boot系列-集成MySQL
在Spring Boot中集成MySQL是为了让开发者能够轻松地与MySQL数据库进行交互.本篇文章将指导你如何在Spring Boot 3.2.3项目中使用Gradle来集成MySQL.在此之前,我 ...
- [C++] 进程注入dll版
目录 前言 前提 原理 代码 一些问题 前言 这几天在弄进程注入的事情,一直做不出来直接的进程注入,也就是不要dll的注入.因为dll注入据说容易触发杀软,但是弄了两天没弄出来.代码明明不报错,目标进 ...
- Java 多线程----- 解决线程安全问题的 方式三:Lock锁 --------jdk 5.0 新增
1 package bytezero.deadlock; 2 3 import java.util.concurrent.locks.ReentrantLock; 4 5 /** 6 * 解决线程安全 ...