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 ...
随机推荐
- pikachu sql inject delete 注入
留言板输入几条信息 出现删除按钮,点他 通过burpsuite拦截请求,请求报文如下 GET /vul/sqli/sqli_del.php?id=57 HTTP/1.1 Host: 192.168.1 ...
- Vulnhub靶机网卡启动失败(Raise network interfaces)
问题 使用一些Linux靶机进行搭建后可能会出现无法搜索到IP的情况,并且会在系统启动时报错,类似下图所示 这个主要是因为vulnhub上的镜像由于搭建环境.版本等问题不适配,网卡没有正确识别导致的, ...
- xml开发笔记(一):tinyXml2库介绍、编译和工程模板
前言 Qt开发Xml相关技术,使用到tinyxml2库. TinyXML TinyXML是一个简单的.小的C++的XML解析器,可以集成到其他程序中.它是ROS的标准XML解析器. 最新 ...
- queryset高级用法:prefetch_related
这个方法和select_related方法类型,就是访问多个表中的数据的时候,减少查询的次数.这个方法是为了解决一对多和多对多的关系的查询问题.比如要获取标题中带有hello字符串的文章以及它的所有标 ...
- 【Azure 应用服务】App Service for Linux环境中,如何解决字体文件缺失的情况
问题描述 部署在App Service for Linux环境中的Web App.出现了字体文件缺失的问题,页面显示本来时中文的地方,区别变为方框占位. 问题分析 在应用中,通常涉及到显示问题的有两个 ...
- 关于 LLM 和知识图谱、图数据库,大家都关注哪些问题呢?
自 LLM 系列文章<知识图谱驱动的大语言模型 Llama Index>.<Text2Cypher:大语言模型驱动的图查询生成>.<Graph RAG: 知识图谱结合 L ...
- 答对这 9 题你就超越了 83.3% 的图数据库 NebulaGraph 用户
熟悉 NebulaGraph 社区的小伙伴可能都知道一个技能认证叫做:NGCP,全称 NebulaGraph Certified Professional.用户在考试认证期间在 1 个小时内回答 10 ...
- [逆向] FS寄存器
偏移 说明 00 指向SEH链表指针 04 线程堆栈顶部(地址最小) 08 线程堆栈底部(地址最大) 0c SubSystemTib 10 FiberData 14 ArbitraryUserPoin ...
- Hugging Face 表情包来啦!
小编有一个朋友,微信聊基本不回复文字,内容和情绪都化身成表情包直接回复,并且一气呵成.自带上下文衔接.你身边有这样的朋友吗? 作为梦想成为第一家以表情符号上市的公司,以及在社交平台发文 emoji 不 ...
- RocketMQ(11) 消息重试机制和死信队列
七.消息发送重试机制 1 说明 Producer对发送失败的消息进行重新发送的机制,称为消息发送重试机制,也称为消息重投机制. 对于消息重投,需要注意以下几点: 生产者在发送消息时,若采用同步或异步发 ...