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学习资料的小伙伴可以加点击下方链 ...
随机推荐
- 常见shell脚本测试题 for/while语句
1.计算从1到100所有整数的和2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和3.求从1到100所有整数的偶数和.奇数和4.执行脚本输入用户名,若该用户存在,输出提示该用户已存 ...
- 详解C3P0(数据库连接池)
详解C3P0(数据库连接池) 快速索引 一.基本定义 二.使用C3P0(数据库连接池)的必要性 1.JDBC传统模式开发存在的主要问题 三.数据库连接池的详细说明 四.使用连接池的明显优势 1.资源的 ...
- 线程调用BeginInvoke
线程异步调用 Thread objThread = new Thread(new ThreadStart(delegate { Dispatch ...
- POJ 2509 Peter's smokes(Peter的香烟)
POJ 2509 Peter的香烟 描述 Peter抽烟.他抽烟一个个地抽着烟头.从 k (k>1) 个烟头中,他可以抽一根新烟.彼得可以抽几支烟? 输入 输入是一系列行.每行包含两个给出n和k ...
- Sentry 监控 - Environments 区分不同部署环境的事件数据
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Jmeter系列(12)- 上传接口压测
step-1上传接口分析 上传接口源码分析:分析上传文件类型.有无大小限制.存放上传文件服务器 没有源码通过抓包工具,或者Chrome查看框架源代码 接口路径/uploadfile,接口请求POST, ...
- xmind使用技巧
xmind看似每个人都会使用,但是掌握一些小技巧,能够有效提升工作效率. 多行复制粘贴 在xmind中选中多行,复制然后可以直接粘贴到excel.word当中. 在excel.word选中多行,复制然 ...
- AT2305-[AGC010D]Decrementing【博弈论】
正题 题目链接:https://www.luogu.com.cn/problem/AT2305 题目大意 \(n\)个数字两个人进行博弈,每个人的操作为 选择一个大于1的数字减一 之后所有数字除以所有 ...
- 13万字详细分析JDK中Stream的实现原理
前提 Stream是JDK1.8中首次引入的,距今已经过去了接近8年时间(JDK1.8正式版是2013年底发布的).Stream的引入一方面极大地简化了某些开发场景,另一方面也可能降低了编码的可读性( ...
- 安装SpaCy出现报错:requests.exceptions.ConnectionError: HTTPSConnectionPool(host='raw.githubusercontent.com', port=443):
内含安装步骤及报错解决:https://www.cnblogs.com/xiaolan-Lin/p/13286885.html