2021.02.27【NOIP提高B组】模拟 总结
T1
欧拉筛质数时若 \(i\) 是质数且没有被用过就顺便用于计算结果,复杂度 \(O(n)\)
#include<bits/stdc++.h>
using namespace std;
inline int Rd() {
register int x=0; char C=getchar();
for(;C<'0'||C>'9';C=getchar()) ;
for(;C>'/'&&C<':';C=getchar()) x=(x<<1)+(x<<3)+(C^48);
return x;
}
const int N=10000000;
int is[N+5],pr[664585],cnt,sm[N+5],vs[N+5],L,R,T;
inline void Out(int x) {
if(x>9)Out(x/10);
putchar(x%10|48);
}
int main() {
freopen("prime.in","r",stdin);
freopen("prime.out","w",stdout);
is[1]=1;
for(register int i=2;i<=N;i++) {
if(!is[i])pr[++cnt]=i,++sm[i];
for(register int j=1;j<=cnt && i*pr[j]<=N;j++) {
is[i*pr[j]]=1;
if(!is[i] && !vs[i*pr[j]])
++sm[i*pr[j]],vs[i*pr[j]]=1;
if(i%pr[j]==0)break;
}
}
for(register int i=1;i<=N;i++)sm[i]+=sm[i-1];
T=Rd();
while(T--) {
L=Rd(),R=Rd();
Out(sm[R]-sm[L-1]);
putchar(10);
}
}
T2
考试时没有想到贪心做法,炸了。。
正解:一条线两边站企鹅这种情况越多越好,可以直接求出这样连的边数,剩下的企鹅肯定直接与已知的相连即可
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int T,n,K,ans,use,lst[N],nxt[N<<1],to[N<<1],vis[N],cnt;
inline void Ae(int fr,int go) {
to[++cnt]=go,nxt[cnt]=lst[fr],lst[fr]=cnt;
}
void dfs(int u,int f) {
for(int i=lst[u],v;i;i=nxt[i])
if((v=to[i])^f) {
dfs(v,u);
if(!vis[u] && !vis[v]) {
if(use<K)++ans;
use+=2;
vis[u]=vis[v]=1;
}
}
}
int main() {
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&K);
memset(lst,0,sizeof(lst));
memset(vis,0,sizeof(vis));
cnt=0;
for(int i=1,x;i<n;i++) {
scanf("%d",&x);
Ae(i+1,x),Ae(x,i+1);
}
ans=use=0;
dfs(1,1);
if(use<K)ans+=K-use;
printf("%d\n",ans);
}
}
T3
容易看出是状压再跑一遍走迷宫一样的玩意。
不知道为什么打了一个 \(\text{SPFA}\) ,蜜汁 95 分,感觉还是用普通广搜稳重。
希望下次注意
#include<bits/stdc++.h>
using namespace std;
const int N=5005,M=6005;
int n,m,K,p[30]={1},gt[N],nxt[M],to[M],lst[N],st[M],vis[N][1025];
struct ps {
int u,s,p;
ps(int x=0,int y=0,int z=0):
u(x),s(y),p(z) { }
}nw;
queue<ps>q;
int main() {
freopen("room.in","r",stdin);
freopen("room.out","w",stdout);
for(int i=1;i<=20;i++)p[i]=p[i-1]<<1;
scanf("%d%d%d",&n,&m,&K);
for(int i=1,x;i<=n;i++) {
for(int j=1;j<=K;j++) {
scanf("%d",&x);
if(x)gt[i]|=p[j-1];
}
}
for(int i=1,fr,x;i<=m;i++) {
scanf("%d%d",&fr,&to[i]);
for(int j=1;j<=K;j++) {
scanf("%d",&x);
if(x)st[i]|=p[j-1];
}
nxt[i]=lst[fr],lst[fr]=i;
}
q.push(ps(1,gt[1],0));
vis[1][gt[1]]=1;
while(!q.empty()) {
nw=q.front(),q.pop();
register int u=nw.u,ns=nw.s;
for(int i=lst[u],v,vs;i;i=nxt[i])
if((ns&st[i])==st[i]) {
if(!vis[v=to[i]][vs=ns|gt[v]]) {
q.push(ps(v,vs,nw.p+1));
vis[v][vs]=1;
if(v==n) {
printf("%d",nw.p+1);
return 0;
}
}
}
}
printf("No Solution");
}
T4
比赛时用链表暴力整了一个 60 。但正如 PMX 所说:这已经是正解了
题目可以转化为找到最近一个符合条件的位置,用线段树就可以维护了
\(P.S.\) 权值线段树更加方便
#include<bits/stdc++.h>
using namespace std;
inline int Rd() {
register int x=0; char C=getchar();
for(;C<'0'||C>'9';C=getchar()) ;
for(;C>'/'&&C<':';C=getchar()) x=(x<<1)+(x<<3)+(C^48);
return x;
}
inline void Out(int x) {
if(x>9)Out(x/10);
putchar(x%10|48);
}
const int N=100005;
int n,mx,x[N],y[N],ans[N],sz[N<<2];
void Sort(int l,int r) {
int i=l,j=r,mid=x[rand()%(r-l)+l];
while(i<=j) {
while(x[i]<mid)i++;
while(x[j]>mid)j--;
if(i<=j) {
swap(x[i],x[j]);
swap(y[i],y[j]);
i++,j--;
}
}
if(i<r)Sort(i,r);
if(j>l)Sort(l,j);
}
void build(int l,int r,int rt) {
if(l==r) { sz[rt]=1; return; }
register int mid=l+r>>1;
build(l,mid,rt<<1),build(mid+1,r,rt<<1|1);
sz[rt]=sz[rt<<1]+sz[rt<<1|1];
}
int ask(int k,int l,int r,int rt) {
if(l==r)return k>1?-1:l;
register int mid=l+r>>1;
if(sz[rt<<1]>=k)return ask(k,l,mid,rt<<1);
else return ask(k-sz[rt<<1],mid+1,r,rt<<1|1);
}
void change(int p,int l,int r,int rt) {
--sz[rt];
if(l==r)return;
register int mid=l+r>>1;
if(p<=mid)change(p,l,mid,rt<<1);
else change(p,mid+1,r,rt<<1|1);
}
int main() {
freopen("queue.in","r",stdin);
freopen("queue.out","w",stdout);
n=Rd();
for(int i=1;i<=n;i++)
x[i]=Rd(),y[i]=Rd();
build(1,n,1);
if(n>1)Sort(1,n);
for(int i=1;i<=n;i++)
if(n-i<y[i])
return printf("impossible"),0;
for(int i=1,p,q;i<=n;i++) {
p=ask(y[i]+1,1,n,1);
q=ask(n-y[i]-i+1,1,n,1);
if(p<=q)ans[p]=x[i],change(p,1,n,1);
else ans[q]=x[i],change(q,1,n,1);
}
for(int i=1;i<=n;i++)
Out(ans[i]),putchar(32);
}
2021.02.27【NOIP提高B组】模拟 总结的更多相关文章
- 5820. 【NOIP提高A组模拟2018.8.16】 非法输入(模拟,字符串)
5820. [NOIP提高A组模拟2018.8.16] 非法输入 (File IO): input:aplusb.in output:aplusb.out Time Limits: 1000 ms ...
- JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动
5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms ...
- JZOJ 5812. 【NOIP提高A组模拟2018.8.14】 区间
5812. [NOIP提高A组模拟2018.8.14] 区间 (File IO): input:range.in output:range.out Time Limits: 1000 ms Memo ...
- [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码
Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...
- [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动
Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...
- 【NOIP提高A组模拟2018.8.14】 区间
区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...
- [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)
传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...
- [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)
传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...
- [jzoj 5778]【NOIP提高A组模拟2018.8.8】没有硝烟的战争 (博弈论+dp)
传送门 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x ...
- [JZOJ5781]【NOIP提高A组模拟2018.8.8】秘密通道
Description 有一副n*m的地图,有n*m块地,每块是下列四种中的一种:墙:用#表示,墙有4个面,分别是前面,后面,左面,右面.起点:用C表示,为主角的起点,是一片空地.终点:用F表示,为主 ...
随机推荐
- 2020极客大挑战Web题
前言 wp是以前写的,整理一下发上来. 不是很全. 2020 极客大挑战 WEB 1.sha1碰撞 题目 图片: 思路 题目说,换一种请求方式.于是换成post.得到一给含有代码的图片 图片: 分析该 ...
- 在网站copy时自带的版权小尾巴以及“复制代码“,可以怎么实现
前言 每天网上的博客各个领域都会涌现新文章,有时候看到感兴趣的知识就想把某段文字 copy下来 摘录下来,等有时间后慢慢品味 在部分网站上,如果只是复制少量文字,并没有什么不同.但是当我们复制的文字多 ...
- ASP.NET和ASP.NETCore多环境配置对比
前言 多环境配置应该都很熟悉了,最为常见的便是Debug和Release,例如下图是新建的一个asp.net项目,配置文件展开共有三个文件组成 据我所知,大多公司从来没编辑过Web.Debug.con ...
- cookie和localstorge、sessionStorge的区别
一.背景由来 cookie原来是用来网络请求携带用户信息的,只不过在HTML5出现之前,前端没有本地存储的方法,只能使用cookie代替 localstorge.sessionStorge是html5 ...
- box-shadow-阴影,你真的懂吗
大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...
- Markdown学习-Typora
author:涂勇军 标题 (#加一个空格)一级标题 (##加一个空格)二级标题 (###加一个空格)三级标题 (####加一个空格)四级标题 字体 加粗:** hello,World **(快捷键是 ...
- 使用allatori混淆代码
引言 为了保密需要,我们开发出来的程序在实际部署之前,需要先将jar包的代码进行混淆,让用户使用反编译也无法获得源码. allatori就是这样一个混淆java jar包代码的工具. 操作步骤 Ste ...
- Linux_yum源仓库-本地-网络-练习实验
1.本地光盘挂载使用yum源 实验环境centos8 系统版本CentOS-8.3.2011-x86_64-dvd1 1)配置前检查 1.1 虚拟机设置选择对应版本镜像文件 1.2 启动虚拟机后处于连 ...
- 用 Docker 构建 MySQL 主从环境
开源Linux 一个执着于技术的公众号 前言 本篇文章记录使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境.如果你严格按照文中的步骤进 ...
- 为什么vue中的v-bind用在class属性上有点怪?
如图所见,普通的标签属性我们直接使用 :属性名=`props的值` 就可以了.为什么用到class里要加[ ] 这个???