9.23 csp
今天模拟赛出了四道zroi的题,挺GG的。
T1、奇观
因为删除的边比较少,所以从m入手,f[i][j]表示长度为i,终点为j的链的方案数。
C 是长度为3的链,F是 1条 长度为3 的链 和 2条 长度为2 的链。
输出 CCF 即可
T2、铁路
救命的签到题。
因为每次合并时每走一个点就会减少一个点,所以我们直接跳就行。
不需要建新的点,而是用dep值最小的点代替新点所包含的所有点。或者说,每次合并 x 到 y 上的点,就把他们都合并到 lca(x,y)上去。合并只需要用并查集合并即可。
T3、光纤
真正能学知识的题。
直接学了一个‘旋转卡壳’。
本题题意是找一条直线使得所有点到他的距离最小,可以把点都整成一个凸包(可以合并两个凸壳),然后旋转卡壳去找最小的最大值。
也就是枚举凸壳上的每条边和一个对应的点让这个点到这条边的距离最大。(双指针)
求一个点到一条直线的距离:
知道 点A 和 线段BC,用向量叉积求出三角形面积,然后用面积除以长就是高。
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_JUDGE
	freopen("in.in","r",stdin);
	freopen("out.out","w",stdout);
	#endif
	ios::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_JUDGE
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	// #endif
	ios::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;
	}
}
[========]
[========]

今天打的其实不尽人意,只要是T1没签上,一开始看到这题的时候就没想到他是签到题,以为不太可做,结果也就想都没想直接裸了个最简单的暴力,然后就去看T2了,但其实打个好一点的暴力就能拿80分,我只拿了30分,要不然能上第7。然后后面因为读假题导致我觉得T4可做,直接把赌注全压在了T4上,很大程度上也影响我没有再去改T1,但是能赛时打出7k的代码,这场考试也是有鼓励作用的。
那就继续走吧。
9.23 csp的更多相关文章
- 利用CSP探测网站登陆状态
		
0x00 背景 今天看到zone里有同学发帖说了探测支付宝登录状态的帖子:http://zone.wooyun.org/content/17665 由此我想到了我们parsec的@/fd 半年前提到的 ...
 - CSP内容安全策略
		
在浏览网页的过程中,尤其是移动端的网页,经常看到有很多无关的广告,其实大部分广告都是所在的网络劫持了网站响应的内容,并在其中植入了广告代码.为了防止这种情况发生,我们可以使用CSP来快速的阻止这种广告 ...
 - CCF CSP 认证
		
参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...
 - CCF CSP 201312-4 有趣的数
		
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-4 有趣的数 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0 ...
 - 【密码学】CSP的概念
		
CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一个动态连接库,一个签名文件 ...
 - 使用GAC加速 解决CSP问题  Kakuro - Cross Sums
		
Kakuro - Cross Sums 问题如下 一个简单的例子 可以看出限制条件是某行或某列的某几个空白格子求和等于某个值,且每一个限制中的格子所填的数必须为1-9且互异. 直接暴力搜索,空白格子太 ...
 - 【转】密码学 :CSP的概念
		
转:[密码学]CSP的概念 CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一 ...
 - CSP 2019 游记
		
Day -32 开坑. 没什么好说的,等个 5 天等初赛(应该叫第一轮认证)挂掉之后就能弃坑了. 今天开始停课,虽然每天只停半天,但是感觉还是特别的舒服~ 然而得等初赛过了才能全天停课-- 没关系,熬 ...
 - CSP考前复习
		
前言 因为loceaner太菜了,他什么东西都不会 所以他打算学一个东西就记录一下 不过因为他很菜,所以他不会写原理-- 而且,他希望在2019CSP之前不会断更 就酱紫,就是写给他自己的--因为他太 ...
 - CSP 2019游记 & 退役记
		
扶苏让我记录他AK CSP 的事实 ZAY NB!!! "你不配" 两年半的旅行结束了,我背着满满的行囊下了车,望着毫不犹豫远去的列车,我笑着哭了,笑着翻着我的行囊-- 游记 Da ...
 
随机推荐
- 【转载】      Tensorflow如何直接使用预训练模型(vgg16为例)
			
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_44633882/artic ...
 - YouTube上的很多时视频就是有问题的,还经常不允许评论,妥妥的双标网站
			
过多的事情不说了,这些个外国反华势力的网站真是无时无刻的不在视频中加私货,你想评论吧他还能判断你的个人价值观来预估你的评价倾向然后禁止你评价,十分的气人.要是立场不够坚定的人真的是很容易被带偏,像这种 ...
 - java多线程之-CAS无锁-常见API
			
1.背景 这一节,就是学习常用的cas对象与api ..... 2.原子整数 直接看代码吧,或者看API文档 2.1.AtomicInteger的API演示 package com.ldp.demo0 ...
 - Fedora安装后需要做的事情
			
http://blog.csdn.net/fengxinlinux/article/details/72794967
 - DolphinScheduler分布式集群部署指南(小白版)
			
官方文档地址:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 DolphinScheduler简介 摘自官网:Apache DolphinSc ...
 - cdq分治 提高篇
			
优化动态规划 序列 首先要会最长上升子序列的转移,这里就不说了. 我们 \(i\) 位置的初始值为 \(a_i\),可能变成的最大值为 \(mx_i\),可能变成的最小值为 \(mn_i\). 然后如 ...
 - springboot2集成oauth2坑二(The bean 'scopedTarget.oauth2ClientContext', defined in class path resource )
			
码云地址:https://gitee.com/lpxs/lp-springcloud.git 有问题可以多沟通:136358344@qq.com. 由于使用Enableoauth2sso注解一直报错, ...
 - mmdetection使用未定义backbone训练
			
首先找到你需要用到的 backbone,一般有名的backbone 都会在github有相应的代码开源和预训练权重提供 本文以mobilenetv3 + fastercnn 作为举例,在mmdetec ...
 - MySQL数据库基本操作以及使用
			
MySQL数据库 操纵数据库 查看数据库 show databases; 创建数据库 create database <database_name>; 删除数据库 drop databas ...
 - Catlan--卡特兰数--组合数学
			
卡特兰数 \(Catlan\) ·赘述 其实发现卡特兰数和之前不同的是,前面的是给你公式,让你去求具体的例子,然而卡特兰数这里是给你大量例子来给你证明和解释什么是卡特兰数. ·定义 对于卡特兰数来说, ...