ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Educational Codeforces Round 132 (Rated for Div. 2)

2022-07-24 17:02:36  阅读:199  来源: 互联网

标签:Educational Rated 题意 int ios Codeforces cin include define


目录

题目链接

A. Three Doors

A 题意:

总共三个箱子
开局提供一个钥匙,可开启编号相对应的一个箱子
每个箱子内会存放其他箱子的钥匙,问是否可以将所有箱子都开启

A代码:

#include <iostream>
#include <algorithm>
#include <cstring>

#define fi first
#define se second
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
const int N = 1e5+10;
int n,m,T;
int a[N];
int st[N];

int main()
{
	ios;
	
	cin >> T;
	while(T --)
	{
		cin >> n;
		for(int i = 1;i <= 3;i ++){
			cin >> a[i];
		}
		
		st[n] = true;
		if(a[n] == 0 || a[n] == n){
			cout << "NO" << endl;
		}
		else{
			int t = a[n];
			if(a[t] == 0 || a[t] == t || a[t] == n){
				cout << "NO" << endl;
			}
			else cout << "YES" << endl;
		}
	}
	// cout << " " << endl;
	return 0;
}

B. Also Try Minecraft

B 题意 及思路

题意:给你一段序列,序列中的每个数字代表一座山的高度
询问从下标l的山到下标为r的山总计需要掉落多少米(有一双非常nb的幽灵鞋帮助你飞翔(只有在需要爬山的时候使用),每座山都需要到达)。

思路:分别从前往后 和 从后往前作前缀和计算(计算每段需要坠落多少米)
为了赶时间采用了最麻烦的写法,没有细想该如何优化

B 代码

#include <iostream>
#include <algorithm>
#include <cstring>

#define fi first
#define se second
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
const int N = 1e5+10;
int n,m,T;
LL a[N];
LL st[N];
LL stt[N];

int main()
{
	ios;
	
	cin >> n >> m;
	
	for(int i = 0;i < n;i ++){
		cin >> a[i];
	}
	
	for(int i = 1;i < n;i ++){
		if(a[i-1] > a[i])
		st[i] = a[i - 1] - a[i];
	}
	for(int i = 1;i < n;i ++){
		st[i] += st[i-1];
	}
	
	for(int i = n-1;i >= 0;i --){
		if(a[i] > a[i-1])
		stt[i-1] = a[i] - a[i-1];
	}
	
	for(int i = n-1;i >= 0;i --){
		stt[i] += stt[i+1];
	}
	
	// for(int i = 0;i < n;i ++)
	// {
		// cout << stt[i] << " ";
	// }
	
	while(m --){
		int l,r;
		cin >> l >> r;
		
		if(l < r)
		cout << st[r-1] - st[l-1] << endl;
		else cout << stt[r-1] - stt[l-1] << endl;
	}
	// cout << " " << endl;
	return 0;
}

C. Recover an RBS

C 题意以及思路

题意非常简单,就是问这个括号是否有多种不同存在的形式
举个栗子应该更好理解一点: (??? 这个既可以写为(())也可以写为()()所以输出NO因为有两种形式
再看?((?(???,这个只能谢伟((()()))
思路:

  1. 由于出现的括号序列必然是合法的,那么每个出现的)必然可以直接对应上之前出现的(或者?所以当)出现时就优先使用(进行配对,如果(个数为0,则花费?
  2. 血亏的一点在于序列最左边无论是?或者都必为(,原因在于当?出现而(的个数为0时,必然需要充当(的角色,而并不是因为序列的特殊性导致序列最左边与最右边的符号唯一性,这样特殊判断才能让序列中间不产生判断问题。深夜脑子不过关QAQ,不然半小时也不会这样

C代码

#include <iostream>
#include <algorithm>
#include <cstring>

#define fi first
#define se second
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
const int N = 1e5+10;
int n,m,T;
int a[N];
string op;

int main()
{
	ios;
	
	cin >> T;
	while (T --){
		cin >> op;
  // 下面两行纯纯园中
		op[0] = '(';
		op[op.size()-1] = ')'; 
		
		int l = 0,mid = 0;
		
		for(int i = 0;i < op.size();i ++){
			if(op[i] == '(' ) l ++;
			else if(op[i] == ')'){
				if(l) l --;
				else mid --;
			}
			else mid ++;
		
			if(l == 0 && mid == 1){
				l ++;
				mid --;
			}
		}
		
		mid -= l;
		
		if(mid) cout << "NO" << endl;
		else cout << "YES" << endl;
	}
	
	// cout << " " << endl;
	return 0;
}

D. Rorororobot

D题题意及思路

吐槽:nnd还是不能头铁,先做这题就上大分了QAQ
题意:一个机器人在固定高度且有部分格子被封印的棋盘上从初始点到终点,走到被封印的格子或者棋盘外是不被原谅不被允许会被机器神处罚是不可以的,每次行动给定一个参数k代表机器人只能以最低k步进行行走,若行走时经过终点也不行,只能恰好走到终点。

思路:使用线段树去记录并查询从起始点到终点的最高高度信息,若能以maxn(代表从起始点到终点的最高高度)到n(最高高度)之间的某一高度通过则一定可以到达终点(前提在于)$$$ abs(x_2 - x_1) % k == 0 && abs(y_2 - y_1) % k == 0 $$$

D代码:

#include <iostream>
#include <algorithm>
#include <cstring>

#define fi first
#define se second
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
const int N = 2e5+10;
int n,m,T;
int w[N];

struct Node
{
	int l,r;
	int maxn;
} tr[N*4];

void pushup(int u)
{
	tr[u].maxn = max(tr[u << 1].maxn,tr[u << 1 | 1].maxn);
}

void build(int u,int l,int r)
{
	if(l == r) tr[u] = {l,r,w[r]};
	else
	{
		tr[u] = {l,r};
		int mid = l + r >> 1;
		build(u << 1,l,mid),build(u << 1 | 1,mid+1,r);
		pushup(u);
	}
}

int query(int u,int l,int r)
{
	if(tr[u].l >= l && tr[u].r <= r) return tr[u].maxn;
	
	int mid = tr[u].l + tr[u].r >> 1;
	int maxn = 0;
	if(l <= mid) maxn = max(maxn,query(u << 1,l,r));
	if(r > mid) maxn = max(maxn,query(u << 1 | 1,l,r));
	return maxn;
}

int main()
{
	ios;
	cin >> n >> m;
	for(int i = 1;i <= m;i ++) cin >> w[i];
	
	build(1,1,m);
	
	cin >> T;
	while(T --)
	{
		int x1,y1,x2,y2,k;
		
		cin >> y1 >> x1 >> y2 >> x2 >> k;
		int y = abs(y2 - y1);
		int x = abs(x2 - x1);
		if(y % k != 0 || x % k != 0)
		{
			cout << "NO" << endl;
		}
		else
		{
			int maxn = query(1,min(x1,x2),max(x1,x2));
			
			int t = maxn - y1;
			
			if(t < 0) cout << "YES" << endl;
			else if(n - maxn >= k - (t % k)) cout << "YES" <<endl;
			else cout << "NO" << endl;
		}
	}
	
	// cout << " " << endl;
	return 0;
}
stip

暑假开始的这一个月以来的效率确实太慢了QAQ
但也想不到有什么提高效率的办法,或许答案就在眼前了吧QAQ
再垂死挣扎一下吧QAQ

标签:Educational,Rated,题意,int,ios,Codeforces,cin,include,define
来源: https://www.cnblogs.com/xiaye13/p/16514842.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有