首页 > 其他分享 >AT_zone2021 部分

AT_zone2021 部分

时间:2024-01-05 22:45:17浏览次数:24  
标签:ZONe int mid mp ans using zone2021 部分

前言

教练出了个集训赛,就是 AT_zone2021 vp,赛时没切 E,赛后也不想做 E,所以不写。

ZONe_a

用 substr 拆出来,然后检查是不是 ZONe

Code

#include <bits/stdc++.h>
using namespace std;
int main()
{
	string s;
	cin>>s;
	int ans=0;
	for(int i=0;i<s.size()-4;i++) if(s.substr(i,4)=="ZONe") ans++;
	cout<<ans;
	return 0;
}

ZONe_b

每个障碍物顶点和 UFO 可以连出直线,将所有障碍物的直线与 \(y\) 轴交点取 \(\max\),然后输出。

Code

#include <bits/stdc++.h>
using namespace std;
double maxn=-1,maxd=-1;
int main()
{
	double n,d,h,ans=0;
	cin>>n>>d>>h;
	for(int i=1;i<=n;i++)
	{
		double a,b;
		cin>>a>>b;
		ans=max(ans,h-(h-b)/(d-a)*d);
	}
	cout<<fixed<<setprecision(3)<<ans;
	return 0;
}

ZONe_c

比 D 难。又是最大又是最小,想到二分,令当前二分假设的答案为 \(x\)。首先每个人有五个值,要么开五维数组(太麻烦,我没写),要么考虑离散为二进制数,这个二进制数第 \(j\) 位是 \(1\) 就表示这个人的第 \(j\) 个值达到了 \(x\)。只要存在三个人这个二进制数按位或为 \((11111)_2=31\),就说明 \(x\) 可行。但是注意到 \(O(n^3)\) 不能通过,我们先枚举前两人,即两人二进制数异或为 \(now\),则我们需要证明存在或证明不存在子集为 \(31\oplus now\) 的数,所以开 \(mp\) 数组,\(mp_i\) 表示 \(i\) 是不是某个人二进制数的子集,枚举两位后查 \(mp_{31\oplus now}\) 即可。

Code

#include <bits/stdc++.h>
using namespace std;
int sta[3010],v[3010][6],mp[128],n;
int check(int mid)
{
	memset(mp,0,sizeof mp);
	memset(sta,0,sizeof sta);
	mp[0]=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<5;j++)
		if(v[i][j]>=mid) sta[i]|=(1<<j);
		for(int j=sta[i];j;j=((j-1)&sta[i])) mp[j]=1;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		if(mp[31^(sta[i]|sta[j])])
		{
			return 1;
		}
	}
	return 0;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	for(int j=0;j<5;j++)
	cin>>v[i][j];
	int l=1,r=1e9,mid,ans;
	while(l<=r)
	{
		mid=l+r>>1;
		if(check(mid)) ans=mid,l=mid+1;
		else r=mid-1;
	} 
	cout<<ans;
	return 0;
}

ZONe_d

水。两端的维护,想到 deque。开一个 \(flag\),表示序列是否被翻转了。对于类似消消乐的操作,只需要等到插入时检查队头或队尾(取决于 \(flag\))元素是否与当前的一样,来判断是否要消除,最后根据 \(flag\) 决定正序或倒序输出 deque。

Code

#include <bits/stdc++.h>
using namespace std;
deque<char> t; 
int main()
{
	int flag=0;//是否被翻转 
	string s;
	cin>>s;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='R') flag^=1;
		else
		{
			if(flag)
			{
				if(!t.empty()&&s[i]==t.back()) t.pop_back();
				else t.push_back(s[i]);
			}
			else
			{
				if(!t.empty()&&s[i]==t.front()) t.pop_front();
				else t.push_front(s[i]);
			}
		}
	}
	if(flag)
	while(!t.empty())
	{
		cout<<t.front();
		t.pop_front();
	}
	else
	while(!t.empty())
	{
		cout<<t.back();
		t.pop_back();
	}
	return 0;
}

ZONe_f

贴篇自己的题解。

注意到本题与异或有关,并且涉及到关于很多个数的异或结果,想到线性基。把 \(1\sim N\) 除 \(a_i\) 之外的全部加入线性基,并且存下线性基 \(p_i\) 的“原 \(x\)”\(ori_i\),于是如果存在线性基没有值,输出 \(-1\),因为这代表有岛连不上。否则输出它和它最大的位数上的原 \(x\)。

Code

#include <bits/stdc++.h>
using namespace std;
const int N=1<<19;
int cnt[N],p[N],ori[N];
void insert(int x)
{
	int tp=x;
	for(int i=19;~i;i--)
	{
		if(x&(1<<i))
		{
			if(!p[i])
			{
				p[i]=x;
				ori[i]=tp;
				return;
			}
			else x^=p[i];
		}
	}
}
int check(int x)
{
	for(int i=19;~i;i--)
	{
		if(x&(1<<i))
		{
			return x^ori[i];
		}
	}
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int x;
		cin>>x;
		cnt[x]++;
	}
	for(int i=1;i<n;i++) if(!cnt[i]) {insert(i);}
	int l;
	for(int i=19;~i;i--) if((1<<i)<=n)
	{
		l=i;
		break;
	}
	for(int i=0;i<l;i++) if(!p[i])
	{
		cout<<-1;
		return 0;
	}
	for(int i=1;i<n;i++) cout<<i<<' '<<check(i)<<endl;
	return 0;
}

标签:ZONe,int,mid,mp,ans,using,zone2021,部分
From: https://www.cnblogs.com/Crazyouth/p/17948233

相关文章

  • 第三届陕西省大学生网络安全技能大赛部分WriteUp
    Geek精神战队WriteUp(撰写完成后导出为pdf文件提交至平台)微信公众号:Geek_Team网络建设与运维-网络安全信息安全管理与评估这次的CTF题目还是有点难度的,也没有拿到特别好的成绩(最后半小时被冲烂了),此WP仅供学习参考,大佬勿喷。排名战队名称:第27名解题思路WEBEzRCE<?phperr......
  • 一行或者多行超出部分显示省略号
    注意:在写多行省略的时候最好不要写总高度,因为你也不确定会显示一行还是两行,如果一行会出现一段空白区域,与下面内容的间距就会很大,可以写line-height//单行overflow:hidden;text-overflow:ellipsis;white-space:nowrap;//多行overflow:hidden;text-overflow:ell......
  • 【自然语言处理】第3部分:识别文本中的个人身份信息
    自我介绍做一个简单介绍,酒架年近48,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构师酒馆】和【开发者开聊】,有更多的内容分享,谢谢大家收藏。企业架构师需要比较广泛的知识面,了解一个企业......
  • 【自然语言处理】用Python从文本中删除个人信息-第二部分
    自我介绍做一个简单介绍,酒架年近48,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构师酒馆】和【开发者开聊】,有更多的内容分享,谢谢大家收藏。企业架构师需要比较广泛的知识面,了解一个企业......
  • 初识C语言1(C语言的部分基础认知)(初识系列主要目的在于在脑海中初步建立对C语言的认知,建
    C语言是一门通用计算机编程语言,广泛应用于底层开发。 简述写C语言代码的过程       C语言规定:main函数是程序的入口,同时main函数有且只有一个。(一个工程之中)......
  • Microsoft 365解决方案:如何生成外部分享报告
    51CTO博客链接:https://blog.51cto.com/u_13637423组织内部与Partner或者vender协作时,通常会采用共享的方式将文档或者重要资料分享给外部用户便于协同编辑,但组织内部管理员也需要定期生成外部共享报告,其主要原因为:·      审计和合规:某些行业或者组织需要遵循特定的法规和标......
  • django练手系列(五):优化basic.html的功能,增加其它网页引入模板网页后可以变动的部分
    一.折叠basic.html关于导航部分的代码,折叠后如图:二.增加网页可变动部分的方法:增加可变动部分的方法是:在html文件的合适位置插入代码块{%block位置名称%}{%endblock%}引用模板的网页只需要在变动部分写入同样的代码块,即可插入可变动部分。三.增加网页可变动部分......
  • [软件测试] 第三部分 黑盒测试
    目录软件测试期末复习系列课件知识点整合:软件测试基础白盒测试黑盒测试PTA习题汇总:软件测试基础白盒测试-逻辑覆盖测试白盒测试-基本路径测试白盒测试-静态测试黑盒测试-等价类划分黑盒测试-边界值测试黑盒测试-场景法概念与定义黑盒测试:又称功能测试、数据......
  • [软件测试] 第二部分 白盒测试
    白盒测试概念与定义白盒测试:侧重于系统或部件内部机制的测试,类型分为分支测试(判定节点测试)、路径测试、语句测试。控制流分析(基于程序结构):控制流分析是一类用于分析程序控制流结构的静态分析技术,目的在于生成程序的控制流图,在编译器设计程序分析、程序理解等领域都有重要......
  • [软件测试] 第一部分 软件测试基础
    第一部分软件测试基础概念与定义软件危机:软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。软件测试(IEEE1983):软件测试是使用人工和自动手段来运行或测试某个系统的过程,目的在于检验被测软件系统是......