IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Codeforces Round #490 (Div. 3)【未完结】 -> 正文阅读

[数据结构与算法]Codeforces Round #490 (Div. 3)【未完结】

2022.3.3
题单地址:https://codeforces.com/contest/999

A. Mishka and Contest【模拟】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5*5+10;
int n,a[N],k,cnt;
int main(void)
{
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++)
	{
		if(k>=a[i]) cnt++;
		else break;
	}
	for(int i=n;i>=1;i--) 
	{
		if(k>=a[i]) cnt++;
		else break;
	}
	cout<<min(cnt,n);
	return 0;
}

B. Reversing Encryption【模拟】

在这里插入图片描述
题目的意思就是,加密是按照n的因子从大到小翻转。

例如: n=10
因子有 1,2,5,10
按照从大到小的顺序翻转,即10,5,2,1
故先翻转[1,10]
再翻转[1,5]
以此类推

故解密就是逆着进行即可。

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
void solve()
{
	set<int>st;
	for(int i=1;i<=n/i;i++)
	{
		if(n%i==0)st.insert(i),st.insert(n/i);
	}
	for(auto i=st.begin();i!=st.end();i++)
	{
		int t=*i;
		reverse(s.begin(),s.begin()+t);
	}
	cout<<s;
}
int main(void)
{
	cin>>n>>s;
	solve();
	return 0;
}

C. Alphabetic Removals【贪心】

在这里插入图片描述
就是先按照顺序保存各个位置,按照题目所说的删除即可。

#include<bits/stdc++.h>
using namespace std;
string s;
vector<int>ve[27];
map<int,int>mp;
int n,k;
int main(void)
{
	cin>>n>>k>>s;
	for(int i=0;i<n;i++)
	{
		ve[s[i]-'a'].push_back(i);
	} 
	for(int i=0;i<26;i++)
	{
		for(int j=0;j<ve[i].size();j++)
		{
			if(k) mp[ve[i][j]]=-1,k--;
			else break;
		}
		if(!k) break;
	}
	for(int i=0;i<s.size();i++) 
	{
		if(mp[i]) continue;
		cout<<s[i];
	}
	return 0; 
}

E. Reachability from the Capital【强连通 从一个点可以到达所有的点最少加的边数】

在这里插入图片描述

  • 首先进行dfs对所有可以由s直接到达(不添加边)的点做一个标记。
  • 然后对于其他需要添加边到达的点,同样进行dfs,很明显,如果节点u是某一个需要添加边的分量的树的根节点,最优解只需要从s添加一条边到这个根节点u就行了。最后只需要判断有几个这样的根节点就ok了。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*3+10;
int h[N],e[N],ne[N],idx;
int n,m,s,flag[N],vis[N];
map<int,int>mp;
void add(int a,int b)
{
	e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u)
{
	flag[u]=0,vis[u]=1;
	for(int i=h[u];i!=-1;i=ne[i]) 
	{
		int j=e[i];
		if(!vis[j]) dfs(j);
	}
}
int main(void)
{
	cin>>n>>m>>s;
	memset(h,-1,sizeof h);
	for(int i=1;i<=n;i++) flag[i]=1;
	while(m--)
	{
		int a,b; cin>>a>>b;
		add(a,b); 
	}
	dfs(s);
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(flag[i])
		{
			memset(vis,0,sizeof vis);
			dfs(i);
			flag[i]=1;//根节点 
			//注意不要在这直接统计根节点,因为这可能并不是一个根节点而是一个树上的一支而已。
		}
	}
	for(int i=1;i<=n;i++) cnt+=flag[i];//所有的根节点
	cout<<cnt;
	return 0;
} 
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:50:05  更:2022-03-04 15:52:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:53:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码