21.7.24 test
\(NOIP\) 模拟赛
考差了。
T1签到题。注意存在字符串长度为0,不能直接模。\(100\rightarrow0\)
代码:
#include<bits/stdc++.h>
using namespace std;
int k1,k2,k3,len;
string s,t;
int s1[85],s2[85],s3[85];
char c1[85],c2[85],c3[85];
signed main(){
freopen("a.in","r",stdin);
freopen("a.in","w",stdout);
cin>>k1>>k2>>k3>>s;
t=s;len=s.length();
for(int i=0;i<len;i++){
if(s[i]>='a'&&s[i]<='i')s1[++s1[0]]=i,c1[s1[0]]=s[i];
else if(s[i]>='j'&&s[i]<='r')s2[++s2[0]]=i,c2[s2[0]]=s[i];
else s3[++s3[0]]=i,c3[s3[0]]=s[i];
}
k1%=s1[0],k2%=s2[0],k3%=s3[0];
for(int i=1;i<=s1[0];i++){
int v=i+k1;if(v>s1[0])v%=s1[0];
t[s1[v]]=c1[i];
}
for(int i=1;i<=s2[0];i++){
int v=i+k2;if(v>s2[0])v%=s2[0];
t[s2[v]]=c2[i];
}
for(int i=1;i<=s3[0];i++){
int v=i+k3;if(v>s3[0])v%=s3[0];
t[s3[v]]=c3[i];
}
cout<<t;
return 0;
}
T2
可以看出是平面最近点对,之前看到过但没做。。。\(100\rightarrow40\)
经典\(O(n\log n)\) 分治做法。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define in read()
inline int read(){
int p=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){p=p*10+c-'0';c=getchar();}
return p*f;
}
const int N=100005;
struct node{
int x,y;
}t[N],A[N],B[N];
int n;
inline bool cmp1(node a,node b){return a.x<b.x;}
inline bool cmp2(node a,node b){return a.y<b.y;}
inline int dis(node a,node b){
int tx=a.x-b.x,ty=a.y-b.y;
return tx*tx+ty*ty;
}
inline int binl(int key,int bn){
int l=1,r=bn,mid;
while(l<r){
mid=(l+r)>>1;
if(A[mid].y>key)r=mid;
else l=mid+1;
}
return l;
}
inline int binr(int key,int bn){
int l=1,r=bn,mid;
while(l<r){
mid=(l+r+1)>>1;
if(A[mid].y<key)l=mid;
else r=mid-1;
}
return l;
}
inline int solve(int l,int r){
if(l==r)return 0x7fffffffffffffff;
int mid=(l+r)>>1;
int d1=solve(l,mid),d2=solve(mid+1,r),d=min(d1,d2),an=0,bn=0;
for(int i=mid;t[mid].x-t[i].x<d&&i>=l;i--)
A[++an]=t[i];
for(int i=mid+1;t[i].x-t[mid].x<d&&i<=r;i++)
B[++bn]=t[i];
sort(B+1,B+1+bn,cmp2);
sort(A+1,A+1+an,cmp2);
int tl=binl(B[1].y-d,an),tr=binr(B[1].y+d,an);
for(int i=1;i<=bn;i++){
while(A[tl].y<=B[i].y-sqrt(d)&&tl<an)tl++;
while(A[tr+1].y<B[i].y+sqrt(d)&&tr<bn)tr++;
for(int j=tl;j<=tr;j++)
d=min(d,dis(B[i],A[j]));
}
return d;
}
signed main(){
n=in;
for(int i=1;i<=n;i++){
t[i].y=t[i-1].y+in;
t[i].x=i;
}
sort(t+1,t+1+n,cmp1);
printf("%lld",solve(1,n));
return 0;
}
T3
需要对两个函数进行分析。正解链剖线段树。但暴力dfs加小优化也能A。我有想过优化但认为其能被卡,所以\(100\rightarrow40\)
代码:
#include<bits/stdc++.h>
using namespace std;
#define in read()
inline int read(){
int p=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){p=p*10+c-'0';c=getchar();}
return p*f;
}
const int N=200005;
struct edge{
int v,next;
}e[N*2];
int head[N],en;
void insert(int u,int v){
e[++en].v=v;
e[en].next=head[u];
head[u]=en;
}
int n,q,a[N],fa[N],f1[N],f2[N];
void dfs(int u){
int t1=f1[u],t2=f2[u];
if(f1[fa[u]]+1<a[u])f1[u]=a[u],f2[u]=1;
else if(f1[fa[u]]+1>a[u])f1[u]=f1[fa[u]]+1,f2[u]=f2[fa[u]];
else f1[u]=f1[fa[u]]+1,f2[u]=f2[fa[u]]+1;
if(t1==f1[u]&&t2==f2[u])return ;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(v==fa[u])continue;
fa[v]=u;
dfs(v);
}
}
signed main(){
//freopen("c.in","r",stdin);
//freopen("c.out","w",stdout);
n=in;
for(int i=1;i<=n;i++)
a[i]=in;
for(int i=1;i<n;i++){
int u=in,v=in;
insert(u,v);
insert(v,u);
}
f1[1]=a[1],f2[1]=1;
for(int i=head[1];i;i=e[i].next){
int v=e[i].v;
fa[v]=1;
dfs(v);
}
q=in;
for(int i=1;i<=q;i++){
int opt=in;
if(opt==0){
int u=in,val=in;
a[u]=val;
dfs(u);
}
if(opt==1){
int u=in;
cout<<f1[u]<<" "<<f2[u]<<'\n';
}
}
return 0;
}
T4
在用权值线段树求LIS时做些修改即可,但我写挂了。\(100\rightarrow0\)
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=50005;
const int mod=1000000007;
int n;
int a[N];
int qn,q[N];
int bin(int key){
int l=1,r=qn;
int mid;
while(l<r){
mid=(l+r)>>1;
if(q[mid]>key)r=mid-1;
else if(q[mid]<key)l=mid+1;
else{l=mid;break;}
}
return l;
}
int len[N],fro[N];
//seg_tree----------------
#define m(x) tree[x].m
#define sum(x) tree[x].sum
struct node{
int sum,m;
}tree[4*N];
void built(int l,int r,int p){
m(p)=sum(p)=0;
if(l==r)return ;
int mid=(l+r)>>1;
built(l,mid,p<<1);
built(mid+1,r,p<<1|1);
return ;
}
struct temp{int maxn,many;};
temp query(int l,int r,int p,int ql,int qr){
temp ans;
ans.many=ans.maxn=0;
if(ql>qr)return ans;
if(l>=ql&&r<=qr){
ans.maxn=m(p);
ans.many=sum(p);
return ans;
}
int mid=(l+r)>>1;
if(ql<=mid)ans=query(l,mid,p<<1,ql,qr);
if(qr>mid){
if(!ans.maxn)ans=query(mid+1,r,p<<1|1,ql,qr);
else{
temp ans1=query(mid+1,r,p<<1|1,ql,qr);
if(ans.maxn==ans1.maxn) ans.many+=ans1.many;
else if(ans.maxn<ans1.maxn)ans.maxn=ans1.maxn,ans.many=ans1.many;
}
}
return ans;
}
void update(int l,int r,int p,int u,int d){
if(l==r){
if(d==m(p))sum(p)++;
if(d>m(p)){m(p)=d;sum(p)=1;}
return ;
}
int mid=(l+r)>>1;
if(u<=mid)update(l,mid,p<<1,u,d);
else update(mid+1,r,p<<1|1,u,d);
if(m(p<<1)==m(p<<1|1)){
m(p)=m(p<<1);
sum(p)=sum(p<<1)+sum(p<<1|1);
}
else if(m(p<<1)>m(p<<1|1)){
m(p)=m(p<<1);
sum(p)=sum(p<<1);
}
else{
m(p)=m(p<<1|1);
sum(p)=sum(p<<1|1);
}
return ;
}
//------------------------
signed main(){
freopen("d.in","r",stdin);
freopen("d.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
q[i]=a[i];
}
sort(q+1,q+1+n);
qn=unique(q+1,q+1+n)-(q+1);
for(int i=1;i<=n;i++)
a[i]=bin(a[i]);
built(1,qn,1);
int maxlen=0,tans=0;
for(int i=1;i<=n;i++){
temp t=query(1,qn,1,1,a[i]-1);
len[i]=1+t.maxn;
fro[i]=t.many;
update(1,qn,1,a[i],len[i]);
if(len[i]>maxlen){
maxlen=len[i];
tans=fro[i]%mod;
}
else if(len[i]==maxlen)
tans=(tans+fro[i])%mod;
}
//for(int i=1;i<=n;i++)
// cout<<len[i]<<" ";
//cout<<endl;
//for(int i=1;i<=n;i++)
// cout<<fro[i]<<" ";
//cout<<maxlen<<" "<<tans;
cout<<tans;
return 0;
}
考的不理想.
21.7.24 test的更多相关文章
- ffmpeg-20160908[09,10,13,15,19,21,22,24]-bin.7z
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...
- 记录21.07.24 —— Vue的组件与路由
VUE组件 作用:复用性 创建组件的三种方式 第一种:使用extends搭配component方法 第二种:直接使用component方法 只有用vue声明且命名的才称之为创建组件 注意:templa ...
- FF D8 FF FE 00 24 47 00转图片
String[] img = "FF D8 FF FE 00 24 47 00 9D 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 0 ...
- 【DFS】算24点
[tyvj2802/RQNOJ74]算24点 描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您 ...
- java处理中国气象数据,提取汇总陕西地区24小时各观测点的数据(csv格式)
1.先贴一下气象数据的csv源格式,由于数据内容较多,就放一部分(china_sites_20150102.csv) date,hour,type,1001A,1002A,1003A,1004A,10 ...
- 洛谷P1236 算24点
题目描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算, ...
- 洛谷 P1236 算24点
题目描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为"算24点".您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数 ...
- 【a501】算24点
Time Limit: 1 second Memory Limit: 32 MB [问题描述] 几十年前全世界就浒一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为"算24点&quo ...
- 用python代替人脑运算24点游戏
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:老方玩编程 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
随机推荐
- <input type="file">如何实现自定义样式
利用样式覆盖来实现效果:先看下原本和改变后的样式 1 <!doctype html> 2 <html> 3 <head> 4 <title>file自定 ...
- Spring Boot 2.x 之 H2 数据库
1. Spring Boot下H2数据库的常用配置项 # 指定数据库的类型 spring.datasource.platform=h2 # 数据库连接地址(文件模式) ## AUTO_SERVER=T ...
- docker学习笔记(二)--配置镜像加速器
前提:docker已经安装好 配置过程 进入至阿里云开发中心,https://dev.aliyun.com/,点击管理中心 管理中心中,点击左侧镜像加速器. 修改配置文件,使用加速器,根据我们目前Do ...
- 洛谷P1094——纪念品分组(简单贪心)
https://www.luogu.org/problem/show?pid=1094 题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得 的纪念品价值相对均 ...
- 利用 Nginx 搭建小型的文件服务器
利用 Nginx 搭建小型的文件服务器 1.查看 Nginx 配置 android@localhost:/etc/nginx/conf.d$ nginx -hnginx version: nginx/ ...
- Java基础系列(38)- 数组的使用
数组的使用 For-Each循环 数组作方法入参 数组作返回值 For-Each循环 普通型 package array; import sun.security.util.Length; publi ...
- Jmeter系列(20)- 录制控制器
作用:相当于对录制的脚本进行分组存放,放在同一个线程组里面:录制脚本的时候,选择线程组下面想要存放的录制控制器中
- php nginx 路径批量配置
* 假设 E:\upload 作为图片上传的位置 nginx 做web服务 * 创建文件conf.php 放到这个目录下 <?php function handleDir($it, &$ ...
- oracle 查看表结构语句
desc + 表名 describe命令 列出指定表的列定义,视图或同义词,或指定函数或存储过程的详述. 语法:desc[ribe] {[模式.]对象[@链接串]} 模式 表示对象驻留的架构.如果 ...
- Spring,IOC源码分析
有错勿喷 1.首先是Spring,IOC的基本概念 IOC是一个容器 容器启动的时候创建所有单实例对象 我们可以直接从容器中获取到这个对象 2.调试流程 ioc容器的启动过程?启动期间都做了什么(什么 ...