备战蓝桥杯省赛 第二天打卡

本文介绍了如何将字符串转换为char[]数组,并展示了C++中的字符串比较和颜色平衡树(一种数据结构)实现,包括dfs遍历算法。作者对颜色平衡树部分表示尚未完全理解,计划后续继续研究。
摘要由CSDN通过智能技术生成

1、更小的数,主要是关于string转化为char[]的问题

string s;
char ch[s.length()+1];
strcpy(ch,s.c_str());
int main()
{
	string s;
	cin >> s;
	char ch[s.length() + 1];
	strcpy(ch, s.c_str());
	int len;
	int count = 0;
	for (len = 2; len <= s.length(); len++)
	{
		for (int i = 0; i < s.length(); i++)
		{
			for (int j = i,k=i+len-1; j < len; j++,k--)
			{
				if (ch[k] > ch[j])
				{
					count++;
					break;
				}
			}
		}
	}
	return 0;
}

2、颜色平衡树问题,代码放这,没弄懂,明天继续,,,,,

#include<bits/tdc++.h>
#include<iostream>
#include<algorithm>
#include<unordered_map>

const int N = 200010;
unordered_map<int, int>sum[N], cnt[N];  //cnt存储子节点的颜色
int col[N];     //颜色
vector<int>e[N];  //节点
int ans = 0;  //构成平衡树的节点个数
int n;

void dfs(int u)
{
	cnt[u][col[u]]=sum[u][1]=1;  
	for (auto &k : e[u])
	{
		dfs(k);  
		for (auto &it : cnt[k])
		{
			int x = it.first, y = it.second;
			if (cnt[u].count(x) && !--sum[u][cnt[u][x]])
				sum[u].erase(cnt[u][x]);
			sum[u][cnt[u][x] += y]++;
		}
	}
	ans += sum[u].size() == 1;
}

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		int a;  
		cin >> col[i] >> a;
		e[a].push_back(i);
	}
	dfs(1);
	cout << ans;
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值