首页 > 编程语言 >第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组

第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组

时间:2024-09-05 23:48:11浏览次数:3  
标签:cout 赛省赛 C++ 蓝桥 int maxn bool lmin define

之前没接触过oi赛制打了一下心态小崩。。以为会了五题写出来对了两题,我就是纯纯小丑哈哈。
只打了两个小时也不能算正经vp把,就当是一个补题

2.灭鼠先锋

推必败必胜局面即可。具体的我就是乱推的,对于必胜的可能要稍微多想一会,对于必败的只要找出一种必败情况那显然就是必败了。但是因为看错题所以写反了。
(这题也要放代码?)

#include <iostream>
using namespace std;
int main()
{
  cout<<"LLLV"<<endl;
  return 0;
}

4.选数异或

思路:通过预处理找到每个l右边最小可行的r,然后查询就是O(1)。注意要处理两遍,第一遍先找到两个数异或等于x的最小r(显然是选每个数a右边第一个x^a),第二遍遍历lmin进一步缩小范围。

不知道为啥wa了(真是败给oi赛制了牛魔的)。后面重新写了一下分类讨论过了

#include<bits/stdc++.h>
using namespace std;
const int maxn=2097152;
int a[maxn];
int lmin[maxn];bool vis[maxn];
vector<int>E[maxn];
set<int>st;
int main()
{
  int n,m,x;cin>>n>>m>>x;
  for(int i=1;i<=n;i++){
    cin>>a[i];
    E[a[i]].push_back(i);
    st.insert(a[i]);
  }
  for(int i=1;i<=n+1;i++)lmin[i]=0x3f3f3f3f;
  for(int i:st){
    if(vis[i])continue;
    int tmp=x^i;vis[i]=1;vis[tmp]=1;
    if(tmp==i){
    	for(int j=E[i].size()-1;j>0;j--){
    		lmin[E[i][j-1]]=E[i][j];
		}
	}
	else{
		int len1=E[tmp].size(),len2=E[i].size();
		int li=0,lj=0;
		while(li<len2&&lj<len1){
			int xi=E[i][li],xj=E[tmp][lj];
			if(xi>xj){
				lmin[xj]=xi;lj++;
			}
			else{
				lmin[xi]=xj;li++;
			}
		}	
	}
  }
  for(int i=n;i>=1;i--){
  	lmin[i]=min(lmin[i],lmin[i+1]);
  	//cout<<lmin[i]<<' ';
  } 
  while(m--){
    int l,r;cin>>l>>r;
    if(r>=lmin[l])cout<<"yes"<<endl;
    else cout<<"no"<<endl;
  }
  return 0;
}

5.爬树的甲壳虫

不会概率。

6.青蛙过河

我看到nlogn的复杂度又可以二分第一时间想的是二分+dp结果直接假了。。甚至写成了贪心(所以还是要多考虑一下思路正确性)

其实是结论题(佬说别的方法做不了的时候可能就是缺结论)

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define mkp make_pair
#define fir first
#define sec second
#define pb push_back
const int maxn = 1e5+10;
int h[maxn],f[maxn],x,n,pre[maxn];
bool jud(int mid){
	bool q=1;
  for(int i=mid;i<n;i++){
  	if(pre[i]-pre[i-mid]<x)q=0;
  }
  if(q)return 1;
  else return 0;
}
signed main(){
  cin>>n>>x;
  x*=2;
  int l=1,r=n;bool xqq=1;
  for(int i=1;i<n;i++){
    cin>>h[i];pre[i]=pre[i-1]+h[i];
  }
  int mid=(l+r)>>1;
  while(l<r){
    if(jud(mid))r=mid;
    else l=mid+1;
    mid=(l+r)>>1;
    //cout<<mid<<endl;
  }
  cout<<mid<<endl;
}

标签:cout,赛省赛,C++,蓝桥,int,maxn,bool,lmin,define
From: https://www.cnblogs.com/lyrrr/p/18399406

相关文章

  • C++ | 泛型编程:模板初阶与函数模板深度解析
    文章目录C++泛型编程:模板初阶与函数模板深度解析1.泛型编程:实现代码的通用性2.函数模板:代码的模具2.1什么是函数模板?2.2函数模板的格式2.3函数模板的原理2.4函数模板的实例化2.5模板参数的匹配原则3.类模板:更进一步的通用性3.1类模板的定义3.2类模板的实例化......
  • 【C++ 关键字】谈谈你对volatitle、extern 关键字的理解
    文章目录1.volatitle的概念2.volatitle的作用3.1.volatitle的概念......
  • 《C++中的面向对象编程三大特性:封装、继承与多态》
    在C++编程的广阔世界中,面向对象编程(Object-OrientedProgramming,OOP)的三大特性——封装、继承和多态,犹如三把强大的利器,帮助程序员构建出高效、可维护和可扩展的软件系统。本文将深入探讨如何在C++中实现这三大特性,并通过具体的代码示例展示它们的强大之处。一、封装(Enca......
  • 《深入理解 C++中的右值引用:开启高效编程新篇章》
    在C++的编程世界中,右值引用是一个强大而又富有特色的特性,它为程序员提供了更高效的资源管理方式和更灵活的编程手段。本文将带你深入探讨C++中的右值引用,揭示其独特的特点和强大的功能。一、标题背后的意义C++中的右值引用究竟有何特殊之处?为何它成为了C++编程中的热点......
  • 实现一个功能完备的 C++ String 类保姆指南
    本篇博客,我们将详细讲解如何从头实现一个功能齐全且强大的C++String类,并深入到各个细节。这篇博客将包括每一步的代码实现、解释以及扩展功能的探讨,目标是让初学者也能轻松理解。一、简介1.1、背景介绍在C++编程中,std::string类是最常用的字符串处理工具,它提供了丰......
  • C++入门项目:Linux下C++轻量级Web服务器 跑通|运行|测试(小白进)
    TinyWebServer是一个开源的项目,适合小白入门C++网络编程,注意该项目是在linux系统下。Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.使用线程池+非阻塞socket+epoll(ET和LT均实现)+事件处理(Reactor和Proactor均实现)的并发模型使用状......
  • 【C++初窥门庭】C++入门(二)
    目录一、 引用1.1引用概念6.2引用特性6.3常引用 6.4使用场景6.5传值、传引用效率比较6.6引用和指针的区别二、 内联函数2.1概念2.2特性三、auto关键字(C++11)3.1类型别名思考3.2auto简介3.3auto的使用细则 3.4 auto不能推导的场景 四、基于范......
  • c++质因数分解
    质因数分解,最先想到了遍历1-n,找出既是质数也是因数的数。需要用到判断质数函数、while循环,复杂度三次方以上了。#include<iostream>usingnamespacestd;boolzs(intn){ for(inti=2;i<=n/2;i++){ if(n%i==0){ return1; } } return0;}intmai......
  • C++基础知识
    1、基本概念1.1 引用类型(reference)        对一个数据可以使用"引用"(reference)类型,这是C++对C的一个重要扩充,引用是一种新的变量类型,它的作用是为一个变量起一个别名inta;int&b=a;        在声明变量b时变量a的引用后,在它......
  • C++学习笔记----6、内存管理(二)---- 数组指针的双向性
            你可能已经看到指针与数组之间的一些重叠。自由内存空间分配的数组由其第一个元素的指针进行访问。栈上的数组通过使用数组语法([])或者正常变量声明来访问。你还会看到的是,其重叠不仅如此,指针与数组有更复杂的关系。1、数组退化至指针        自由内......