\(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的更多相关文章

  1. 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 ...

  2. 记录21.07.24 —— Vue的组件与路由

    VUE组件 作用:复用性 创建组件的三种方式 第一种:使用extends搭配component方法 第二种:直接使用component方法 只有用vue声明且命名的才称之为创建组件 注意:templa ...

  3. 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 ...

  4. 【DFS】算24点

    [tyvj2802/RQNOJ74]算24点 描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您 ...

  5. java处理中国气象数据,提取汇总陕西地区24小时各观测点的数据(csv格式)

    1.先贴一下气象数据的csv源格式,由于数据内容较多,就放一部分(china_sites_20150102.csv) date,hour,type,1001A,1002A,1003A,1004A,10 ...

  6. 洛谷P1236 算24点

    题目描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算, ...

  7. 洛谷 P1236 算24点

    题目描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为"算24点".您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数 ...

  8. 【a501】算24点

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 几十年前全世界就浒一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为"算24点&quo ...

  9. 用python代替人脑运算24点游戏

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:老方玩编程 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

随机推荐

  1. zip命令常用选项

    大家都知道,在linux上一切皆文件,在实际生产环境中,如果我们需要部署一些系统的服务,我们会将一些软件包提前下载下来统一放到一个文件夹中, 然后将部署的过程用shell或者python写成一个脚本, ...

  2. CentOS linux系统将UTC时间修改为CST时间

    1.编辑时间配置文件 1 2 3 4 # vi /etc/sysconfig/clock           ZONE="Asia/Shanghai"     UTC=false  ...

  3. 边缘使用 K8s 门槛太高?OpenYurt 这个功能帮你快速搭建集群!

    OpenYurt作为阿里巴巴首个开源的边缘云原生项目,涉及到边缘计算和云原生两个领域.然而,许多边缘计算的开发者并不熟悉云原生相关的知识.为了降低 OpenYurt 的使用门槛,帮助更多地开发者快速上 ...

  4. umi request 请求资源库详解

    umi-request: 网络请求库,基于fetch封装,兼具fetch 和 axios 的所有特点,具有缓存,超时,字符编码处理,错误处理等常用功能. 1 支持url 参数自动序列化. 2 post ...

  5. Win7 ASP连接数据库“未找到提供程序.该程序可能未正确安装”问题

    是自己装的64位Windows 7系统的原因,默认64位环境下,IIS应用程序池未启用32位应用程序,我们只需要启用一下就可以了.打开IIS 7,定位到"应用程序池",然后选择使用 ...

  6. IDEA - 2019中文版安装教程

    前言 个人安装备忘录 软件简介 IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持. ...

  7. requests接口自动化-assert断言

    断言,自动判断接口返回的结果与预期结果是否一致 from common.get_mysql import * def test_assert(): a=0 b=1 # assert a,'断言失败打印 ...

  8. hadoop报错

    19/11/24 08:29:08 INFO qlh.MyMapreduce: ================this is job================= 19/11/24 08:29: ...

  9. python多线程与threading模块

    python多线程与_thread模块 中介绍了线程的基本概念以及_thread模块的简单示例.然而,_thread模块过于简单,使得我们无法用它来准确地控制线程,本文介绍threading模块,它提 ...

  10. xmake v2.5.8 发布,新增 Pascal/Swig 程序和 Lua53 运行时支持

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...