9.23 csp

news/2024/9/23 21:02:25/文章来源:https://www.cnblogs.com/GGrun-sum/p/18427806

今天模拟赛出了四道zroi的题,挺GG的。

T1、奇观

因为删除的边比较少,所以从m入手,f[i][j]表示长度为i,终点为j的链的方案数。

C 是长度为3的链,F是 1条 长度为3 的链 和 2条 长度为2 的链。

输出 CCF 即可

G

T2、铁路

救命的签到题。

因为每次合并时每走一个点就会减少一个点,所以我们直接跳就行。

不需要建新的点,而是用dep值最小的点代替新点所包含的所有点。或者说,每次合并 x 到 y 上的点,就把他们都合并到 lca(x,y)上去。合并只需要用并查集合并即可。

G

T3、光纤

真正能学知识的题。

直接学了一个‘旋转卡壳’。

本题题意是找一条直线使得所有点到他的距离最小,可以把点都整成一个凸包(可以合并两个凸壳),然后旋转卡壳去找最小的最大值。

也就是枚举凸壳上的每条边和一个对应的点让这个点到这条边的距离最大。(双指针)

zher
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define fi first
#define se second
#define ps emplace_back
#define mk make_pair
typedef unsigned long long ull;
const int N=1e6+10;
inline ll read(){char c=getchar();ll x=0,f=1;while(!isdigit(c))(c=='-'?f=-1:f=1),c=getchar();while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
__int128 n,q[N],top,q1[N],top1;
struct jj{__int128 x,y;
}di[N],zan[N];
#define K(i,j) ((double)(di[j].y-di[i].y)/(di[j].x-di[i].x))
#define ne(x) (x==top?1:x+1)
#define X(i,j) (di[j].x-di[i].x)
#define Y(i,j) (di[j].y-di[i].y)
#define cha(x,y,z) (X(x,y)*Y(x,z)-Y(x,y)*X(x,z))
#define len(x,y) (X(x,y)*X(x,y)+Y(x,y)*Y(x,y))
#define abs(x) (x>=0?x:-x)
pair<__int128,__int128> ans;
char anss[N];
inline void print(__int128 x){if(!x)putchar('0');else{if(x<0)x=-x,putchar('-');int cnt=0;while(x)anss[++cnt]=x%10+'0',x/=10;for(int i=cnt;i;--i)putchar(anss[i]);}
}
int main(){#ifndef ONLINE_JUDGEfreopen("in.in","r",stdin);freopen("out.out","w",stdout);#endifios::sync_with_stdio(0),cin.tie(0),cout.tie(0);n=read();if(n<=2)return cout<<"0/1",0;for(int i=1;i<=n;++i)di[i].x=read(),di[i].y=read();sort(di+1,di+1+n,[](const jj&x,const jj&y){return x.x==y.x?x.y<y.y:x.x<y.x;});n=unique(di+1,di+1+n,[](const jj&x,const jj&y){return x.x==y.x&&x.y==y.y;})-di-1;for(int i=1;i<=n;++i){while(top>1&&(K(q[top],i)<=K(q[top-1],q[top]))){--top;}q[++top]=i;}for(int i=n;i;--i){while(top1>1&&K(i,q1[top1])<=K(q1[top1],q1[top1-1]))--top1;q1[++top1]=i;}for(int i=2;i<top1;++i){q[++top]=q1[i];}for(int i=1;i<=top;++i)zan[i]=di[q[i]];for(int i=1;i<=top;++i)di[i]=zan[i];for(int i=1,j=3;i<=top;++i){while((j==ne(i))||((abs(cha(j,i,ne(i))))<=(abs(cha(ne(j),i,ne(i)))))){j=ne(j);}if(!ans.se||(double)ans.fi/ans.se>(double)cha(j,i,ne(i))*cha(j,i,ne(i))/len(i,ne(i)))ans.fi=cha(j,i,ne(i))*cha(j,i,ne(i)),ans.se=len(i,ne(i));}__int128 gcd=__gcd(ans.fi,ans.se*4);print(ans.fi/gcd);putchar('/');print(ans.se*4/gcd);
}

T4、权值

完全不会写。。。

考场上把题看假了,抱着试一试的心态打了颗线段树,他可以处理不包含操作 4 的极长正数连续段的 乘积、长度,一共打和调了两个半小时,最后调出来了,然后发现读题读假了,那就先把他种在这吧。

tree
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define fi first
#define se second
#define ps emplace_back
#define mk make_pair
const int N=1e6+10;
inline ll read(){char c=getchar();ll x=0,f=1;while(!isdigit(c))(c=='-'?f=-1:f=1),c=getchar();while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
uint sum[N],fsum[N],man[N],bisum[N][2],fbisum[N][2],tag[N];//man qujiansuoyoushudejueduizhide chengji
int len[N][2],flen[N][2],fuhao[N];
bool fan[N];
inline uint qp(uint x,int y){uint ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;
}
inline void qing(int k){sum[k]=fsum[k]=bisum[k][0]=bisum[k][1]=fbisum[k][0]=fbisum[k][1]=len[k][0]=len[k][1]=flen[k][0]=flen[k][1]=0;
}
inline void up(int k,int l,int r){int mid=l+r>>1;man[k]=man[k<<1]*man[k<<1|1];if(len[k<<1][1]&&len[k<<1|1][0])sum[k]=sum[k<<1]+sum[k<<1|1]-bisum[k<<1][1]*len[k<<1][1]-bisum[k<<1|1][0]*len[k<<1|1][0]+(bisum[k<<1][1]*bisum[k<<1|1][0])*(len[k<<1][1]+len[k<<1|1][0]);else sum[k]=sum[k<<1]+sum[k<<1|1];if(flen[k<<1][1]&&flen[k<<1|1][0])fsum[k]=fsum[k<<1]+fsum[k<<1|1]-fbisum[k<<1][1]*flen[k<<1][1]-fbisum[k<<1|1][0]*flen[k<<1|1][0]+(fbisum[k<<1][1]*fbisum[k<<1|1][0])*(flen[k<<1][1]+flen[k<<1|1][0]);else fsum[k]=fsum[k<<1]+fsum[k<<1|1];if(len[k<<1][0]==mid-l+1&&len[k<<1|1][0])len[k][0]=len[k<<1][1]+len[k<<1|1][0],bisum[k][0]=bisum[k<<1][0]*bisum[k<<1|1][0];else len[k][0]=len[k<<1][0],bisum[k][0]=bisum[k<<1][0];if(len[k<<1|1][1]==r-mid&&len[k<<1][1])len[k][1]=len[k<<1|1][1]+len[k<<1][1],bisum[k][1]=bisum[k<<1][1]*bisum[k<<1|1][1];else len[k][1]=len[k<<1|1][1],bisum[k][1]=bisum[k<<1|1][1];if(flen[k<<1][0]==mid-l+1&&flen[k<<1|1][0])flen[k][0]=flen[k<<1][1]+flen[k<<1|1][0],fbisum[k][0]=fbisum[k<<1][0]*fbisum[k<<1|1][0];else flen[k][0]=flen[k<<1][0],fbisum[k][0]=fbisum[k<<1][0];if(flen[k<<1|1][1]==r-mid&&flen[k<<1][1])flen[k][1]=flen[k<<1|1][1]+flen[k<<1][1],fbisum[k][1]=fbisum[k<<1][1]*fbisum[k<<1|1][1];else flen[k][1]=flen[k<<1|1][1],fbisum[k][1]=fbisum[k<<1|1][1];
}
inline void down(int k,int l,int r){int mid=l+r>>1;// if(k==12)cout<<tag[k]<<' '<<fan[k]<<' '<<fuhao[k]<<"NIU"<<endl;if(tag[k]){// len[k<<1][0]=len[k<<1][1]=mid-l+1,len[k<<1|1][0]=len[k<<1|1][1]=r-mid;tag[k<<1]=tag[k<<1|1]=tag[k];man[k<<1]=qp(tag[k],(mid-l+1)),man[k<<1|1]=qp(tag[k],(r-mid));tag[k]=0;}if(fan[k]){swap(sum[k<<1],fsum[k<<1]);swap(len[k<<1],flen[k<<1]),swap(bisum[k<<1],fbisum[k<<1]),fan[k<<1]^=1;fuhao[k<<1]*=-1;swap(sum[k<<1|1],fsum[k<<1|1]);swap(len[k<<1|1],flen[k<<1|1]),swap(bisum[k<<1|1],fbisum[k<<1|1]),fan[k<<1|1]^=1;fuhao[k<<1|1]*=-1;fan[k]=0;}if(fuhao[k]){qing(k<<1),qing(k<<1|1);fuhao[k<<1]=fuhao[k<<1|1]=fuhao[k];if(fuhao[k]==1){sum[k<<1]=man[k<<1]*(mid-l+1);len[k<<1][0]=len[k<<1][1]=mid-l+1;bisum[k<<1][0]=bisum[k<<1][1]=man[k<<1];sum[k<<1|1]=man[k<<1|1]*(r-mid),len[k<<1|1][0]=len[k<<1|1][1]=r-mid,bisum[k<<1|1][0]=bisum[k<<1|1][1]=man[k<<1|1];}else{fsum[k<<1]=man[k<<1]*(mid-l+1);flen[k<<1][0]=flen[k<<1][1]=mid-l+1;fbisum[k<<1][0]=fbisum[k<<1][1]=man[k<<1];fsum[k<<1|1]=man[k<<1|1]*(r-mid),flen[k<<1|1][0]=flen[k<<1|1][1]=r-mid,fbisum[k<<1|1][0]=fbisum[k<<1|1][1]=man[k<<1|1];	}fuhao[k]=0;}// if(k==12)cout<<man[25]<<' '<<sum[25]<<"MO"<<endl;
}
inline void add1(int k,int l,int r,int L,int R,int v){if(L<=l&&r<=R){qing(k);man[k]=qp(v,r-l+1);if(v>0){fuhao[k]=1;len[k][0]=len[k][1]=r-l+1;bisum[k][0]=bisum[k][1]=man[k],sum[k]=man[k]*(r-l+1),tag[k]=v,fan[k]=0;}else{fuhao[k]=-1;v=-v;flen[k][0]=flen[k][1]=r-l+1;fbisum[k][0]=fbisum[k][1]=man[k],fsum[k]=man[k]*(r-l+1),tag[k]=v,fan[k]=0;}return;}down(k,l,r);int mid=l+r>>1;if(L<=mid)add1(k<<1,l,mid,L,R,v);if(R>mid)add1(k<<1|1,mid+1,r,L,R,v);up(k,l,r);
}
inline void add2(int k,int l,int r,int L,int R,int v){if(L<=l&&r<=R){qing(k);if(v>0){fuhao[k]=1;len[k][0]=len[k][1]=r-l+1;bisum[k][0]=bisum[k][1]=man[k],sum[k]=man[k]*len[k][0],fan[k]=0;}else{fuhao[k]=-1;flen[k][0]=flen[k][1]=r-l+1;fbisum[k][0]=fbisum[k][1]=man[k],fsum[k]=man[k]*len[k][0],fan[k]=0;}return ;}down(k,l,r);int mid=l+r>>1;if(L<=mid)add2(k<<1,l,mid,L,R,v);if(R>mid)add2(k<<1|1,mid+1,r,L,R,v);up(k,l,r);
}
inline void add3(int k,int l,int r,int L,int R){if(L<=l&&r<=R){fan[k]^=1;fuhao[k]*=-1;swap(sum[k],fsum[k]),swap(len[k],flen[k]),swap(bisum[k],fbisum[k]);return;}down(k,l,r);int mid=l+r>>1;if(L<=mid)add3(k<<1,l,mid,L,R);if(R>mid)add3(k<<1|1,mid+1,r,L,R);up(k,l,r);
}
struct jj{uint sum,bisum[2];int len[2];
};
inline jj ask(int k,int l,int r,int L,int R){if(L<=l&&r<=R){return jj{sum[k],bisum[k][0],bisum[k][1],len[k][0],len[k][1]};}down(k,l,r);int mid=l+r>>1;if(L<=mid&&R>mid){auto i=ask(k<<1,l,mid,L,R),j=ask(k<<1|1,mid+1,r,L,R);if(i.len[1]&&j.len[0])i.sum=i.sum+j.sum-i.bisum[1]*i.len[1]-j.bisum[0]*j.len[0]+(i.bisum[1]*j.bisum[0])*(i.len[1]+j.len[0]);else i.sum=i.sum+j.sum;if((i.len[0]==mid-max(l,L)+1)&&j.len[0])i.len[0]=i.len[0]+j.len[0],i.bisum[0]=i.bisum[0]*j.bisum[0];if((j.len[1]==min(r,R)-mid)&&i.len[1])i.len[1]=i.len[1]+j.len[1],i.bisum[1]=i.bisum[1]*j.bisum[1];else i.len[1]=j.len[1],i.bisum[1]=j.bisum[1];return i;}if(L<=mid)return ask(k<<1,l,mid,L,R);return ask(k<<1|1,mid+1,r,L,R);
}
int n,m,a[N];
inline void jian(int k,int l,int r){if(l==r){if(a[l]>0){bisum[k][0]=bisum[k][1]=sum[k]=man[k]=a[l],len[k][0]=len[k][1]=1;}else{fbisum[k][0]=fbisum[k][1]=fsum[k]=man[k]=-a[l],flen[k][0]=flen[k][1]=1;}// cout<<l<<' '<<k<<' '<<sum[k]<<' '<<fsum[k]<<endl;return ;}int mid=l+r>>1;jian(k<<1,l,mid),jian(k<<1|1,mid+1,r);up(k,l,r);
}
int main(){// #ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);// #endifios::sync_with_stdio(0),cin.tie(0),cout.tie(0);n=read(),m=read();for(int i=1;i<=n;++i){a[i]=read();}if(m<=1000){for(int i=1,op,l,r,x;i<=m;++i){op=read(),l=read(),r=read();if(op==5){uint anss=0;for(int j=l;j<r;){while(j<=r&&a[j]<=0)++j;uint ans=1,cnt=0;while(j<=r&&a[j]>0)ans*=a[j],++cnt,++j;anss+=ans*cnt;}cout<<anss<<'\n';}else{x=read();if(op==1){for(int j=l;j<=r;++j)a[j]=x;}else if(op==2){for(int j=l;j<=r;++j)a[j]=abs(a[j])*x;}else if(op==3){for(int j=l;j<=r;++j)a[j]*=x;}else {for(int j=l;j<=r;++j){a[j]>0?a[j]=1:a[j]=-1;a[j]*=x;}}}}return 0;}// cout<<1<<endl;jian(1,1,n);for(int i=1,op,l,r,x;i<=m;++i){op=read(),l=read(),r=read();if(op==5)cout<<ask(1,1,n,l,r).sum<<'\n';else if(op==1)add1(1,1,n,l,r,read());else if(op==2)add2(1,1,n,l,r,read());else{x=read();if(x==-1)add3(1,1,n,l,r);}// cout<<endl;}}

[========]

[========]

image

今天打的其实不尽人意,只要是T1没签上,一开始看到这题的时候就没想到他是签到题,以为不太可做,结果也就想都没想直接裸了个最简单的暴力,然后就去看T2了,但其实打个好一点的暴力就能拿80分,我只拿了30分,要不然能上第7。然后后面因为读假题导致我觉得T4可做,直接把赌注全压在了T4上,很大程度上也影响我没有再去改T1,但是能赛时打出7k的代码,这场考试也是有鼓励作用的。

那就继续走吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/802424.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

业财一体化视角下-电商ERP采购模块的设计

本文将深入探讨如何在采购模块的设计中有效体现业财一体化理念,从财务三大报表的基本概念出发,详细解析采购过程中的财务管理关键要素,并分享采购流程设计中应注意的重点,以期为企业提供有价值的参考和指导。业财一体化的重要性日益凸显,越来越多企业认识到业务运营与财务管…

第二十三讲:MySQL是怎么保证主备一致的?

第二十三讲:MySQL是怎么保证主备一致的? 简概开篇 ​ 在前面的文章中,我不止一次地和你提到了 binlog,大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢?今天我就正式地和你介绍一下它。毫…

破防了,遂刷一节课圆锥曲线放松大脑,原因如图

来个有缘人 #include<bits/stdc++.h> using namespace std; #define int __int128 void _print(__int128 x,bool first=true){if(x<0){putchar(-);_print(-x,false);return;}if(x==0){if(first) putchar(0);return;}_print(x/10,false);putchar((int)(x%10)+0); } #de…

9月23日总结

今天上了数据结构课,学习了线性表的增删改查;正式上了第一节Java课,学习了些Java的基本知识,运行了代码,部分运行结果如下:

动手实验 1

请运行以下代码(TestDouble.java) public class TestDouble { public static void main(String args[]) {System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));System.out.println("4.015 *…

[GXYCTF2019]BabySQli

这题查看源码后发现一个php文件问了ai后发现MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5是一段 base32编码,经过base32解码,base64解码后的结果是select * from user where username = $name 很明显是一个sql语句,在…

以数赋能实景三维创新“科技+文旅”

在数字化时代,科技与文化的融合为我们带来了无限可能。今天,我们将探讨如何利用实景三维技术,推动“科技+文旅”的创新发展。1. 实景三维技术概述实景三维技术,是一种集成了遥感、地理信息系统(GIS)、三维建模等技术的前沿科技。它能够将现实世界的地理信息以三维形式数字…

什么是原子操作?Java如何实现原子操作?

1.什么是原子操作? 我们在学习MYSQL时就了解过原子性,即整个事务是不可分割的最小单位,事务中任何一个语句执行失败,所有已经执行成功的语句也要回滚,整个数据库状态要恢复到执行任务前的状态。Java中的原子性其实就是和数据库中说的相似,就是不可在分割,在我们的多线程…

JAVA基础之八-方法变量作用域和编译器

本文主要讨论方法中变量作用域。不涉及类属性变量、静态变量、线程变量共享等。 虽然知道某类变量的作用域非常重要,但是没有太多需要说的,因为许多东西是显而易见,不言自明。在大部分情况下,或者在老一点版本中,java语法看起来都比较正常,或者说相对古典。 但是随着JAVA…

信息学奥赛复赛复习01-CSP-J2019-01-字符、字符数组、字符串、string、字符串读取

信息学奥赛复赛复习01-CSP-J2019-01-字符、字符数组、字符串、string、字符串读取 PDF文档公众号回复关键字:202409231 2019 CSP-J 题目1 数字游戏 [题目描述] 小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。 注…

学习高校课程-软件工程-理解需求(ch8)

REQUIREMENTS ENGINEERING 需求工程 Requirements engineering encompasses seven distinct tasks: inception, elicitation,elaboration, negotiation, specification, validation, and management Inception 启动 At project inception, you establish a basic understanding…