ACM实训第十七天

Is It A Tree?

问题

考试时应该做不出来,果断放弃

树是一种众所周知的数据结构,它要么是空的(null, void, nothing),要么是一个或的集合满足以下属性的节点之间有向边连接的节点较多。
•只有一个节点,称为根节点,它没有有向边指向。
•除了根节点外,每个节点都有一条边指向它。
•从根到每个节点有一个唯一的有向边序列。
例如,考虑下面的插图,其中节点由圆圈和边表示用带箭头的线表示。前两个是树,最后一个不是。

在这个问题中,你会得到一些有向连接的节点集合的描述边缘。对于其中的每一个,您都要确定集合是否满足树的定义。
输入
输入将由一系列描述(测试用例)和一对负整数组成。每个测试用例将由边缘描述序列组成,每个边缘后面跟着一对零描述将由一对整数组成;第一个整数标识该边从哪个节点出发开始,第二个整数标识该边所指向的节点。节点号将总是大于0。
输出
对于每个测试用例,显示“case k是一个树”这行。’或者‘Case k不是树’这条线。”,即K对应于测试用例编号(它们从1开始顺序编号)。 

思路

    ①先判断是不是空树,如果是空树(直接输入两个0),就直接判断是树;

    ②然后找这棵树的根节点,如果有一个节点它的入度为0而出度不为0,那它就是根节点,如果没有找到这样的结点就判断它不是树;

    ③在找到一个根节点之后,用广度优先遍历的方法,通过根节点遍历一遍这棵树,如果两次遍历到同一个结点,那就说明这个结点的入度不是1,这就不是树;

    ④广度优先遍历结束之后,如果所有的结点都被访问过了,那就说明这是树,否则就不是树(不是连通的)。

代码 

#include <cstdio>
#include <cstdlib>
#include <climits>
#include <memory>
#include <cstring>
#include <cmath>
#include <queue>
#include <map>
#include <iostream>
using namespace std;
 
const int maxn = 10000;
 
int first[maxn];
int second[maxn];
int counter;
bool visited[maxn];
 
queue<int> q;
 
bool isRoot(int index, int counter)
{
    bool retVal = false;
    for(int i = 0; i < counter; i++)
    {
        if(second[i] == index) return false;
        if(first[i] == index) retVal = true;
    }
    return retVal;
}
 
int main()
{
    int number = 0;
    int first_in, second_in;
    while(cin>>first_in>>second_in)
    {
        if(first_in == -1 || second_in == -1) break;
 
        if(first_in == 0 && second_in == 0)
        {
            printf("Case %d is a tree.\n", ++number);
            continue;
        }
 
        counter = 0;
        memset(visited, 0, sizeof(visited));
 
        do
        {
            if(first_in == 0 && second_in == 0) break;
            first[counter] = first_in;
            second[counter] = second_in;
            ++counter;
        }
        while(cin>>first_in>>second_in);
 
        // find a root node
        int index;
        for(index = 0; index < maxn; index++)
        {
            if(isRoot(index, counter)) break;
        }
 
        if(index == maxn)
        {
            printf("Case %d is not a tree.\n", ++number);
            continue;
        }
        while(!q.empty()) q.pop();
        q.push(index);
 
        bool isTree = true;
        int treesize = counter;
        while(!q.empty())
        {
            int root = q.front();
            q.pop();
 
            if(visited[root])
            {
                isTree = false;
                break;
            }
            visited[root] = true;
 
            for(int i = 0; i < counter; i++)
            {
                if(first[i] == root)
                {
                    q.push(second[i]);
                    --treesize;
                }
            }
        }
        if(!isTree || treesize != 0)
            printf("Case %d is not a tree.\n", ++number);
        else
            printf("Case %d is a tree.\n", ++number);
    }
}

Global Raining at Bididibus

问题

好难呀

 

思路

(⊙o⊙)…这道题网络上居然没有找到解题方法

代码 

在CSDN上看到唯一提到这道题的点进去发现居然是我自己


【碎碎念】

我终于知道为什么往届同学做这套题的很少,原来是因为太难了QAQ

这套题第一道题和第三道题可以尝试去做,第二套争取会做


Tokitsukaze and All Zero Sequence

代码 

#include<stdio.h>
int main(){
	int t;
	scanf("%d",&t);
	for(int i=0;i<t;i++){
		int flag=0;//注意初始化 
		int ch;
		int n;
		int a[101]={0};
		scanf("%d",&n);
		for(int i=0;i<n;i++){
			scanf("%d",&ch);
			a[ch]++;
			if(a[ch]>1)//注意是大于1 
				flag=1;
		}
		if(a[0]>0)	
			printf("%d\n",n-a[0]);
		else {
			if(flag==1)
				printf("%d\n",n);//输出0和1时不要弄混 
			if(flag==0)
				printf("%d\n",n+1);
		}
	}
	return 0;
}

Aggressive cows 

代码

#include<iostream> 
#include<cstdio>
#include<algorithm>
#include<cstdlib>
using namespace std;
int n,c;
int a[100005];

bool fun(int m){
	int cnt=1,cur=0,next=1;
	while(next<n){
		next++;
		if(a[next]-a[cur]>=m){
			cnt++;
			cur=next;
		}
	}
	if(cnt>=c) return true;
	else return false;
}
int main(){
	scanf("%d %d",&n,&c);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	int l=a[0],r=a[n-1];
	int ans=0;
	sort(a,a+n);
	while(l<=r){
		int mid=(l+r)/2;
		if(fun(mid)){
			ans=mid;
			l+mid+1;
		}else{
			r=mid-1;
		}
	}
	printf("%d",ans);
	return 0;
}

Brainman

代码

#include<iostream> 
#include<stdio.h> 
using namespace std;
 
const int n=200000;
int a[n];//一个N个数的序列
 
int main(){
	int m;
	scanf("%d",&m);//场景的数量 
	for(int k=1;k<=m;k++) {
		int p;
		sccanf("%d",&p);//长度 
		for(int i=1;i<=p;i++)
			scanf("%d",&a[i]) ;//元素 
		int cnt=0;
		for(int i=1;i<=p;i++){
			for(int j=i+1;j<=p;j++){
				if(a[i]>a[j])//交换位置 
				cnt++;
			}
		}
		printf("Scenario #%d:\n%d\n\n",k,cnt);
	}
	return 0;
}

Tokitsukaze and Good 01-String (hard version)

 代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
 
using namespace std;
typedef long long ll;
 
const int N = 2e5 + 10;
int n;
string s;
 
int main()
{
	int T;
	cin >> T;
	while(T--)
	{
		cin >> n >> s;
		int x = 0, y = 0;
		char last = ' ';
		for (int i = 0; i < s.size(); i += 2)
		{
			if (s[i] != s[i+1])
				x++;
			else
			{
				if (last != s[i])
					y++;
				last = s[i];
			}
		}
		printf("%d %d\n", x, (y > 1) ? y : 1);
	}
	return 0;
}

学习规划

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/637787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式深度剖析】【2】【创建型】【工厂方法模式】

&#x1f448;️上一篇:单例模式 | 下一篇:抽象工厂模式&#x1f449;️ 目录 工厂方法模式概览工厂方法模式的定义英文原话直译 工厂方法模式的4个角色抽象工厂&#xff08;Creator&#xff09;角色具体工厂&#xff08;Concrete Creator&#xff09;角色抽象产品&#x…

Celery教程

一、什么是Celery 1.1、celery是什么 Celery是一个简单、灵活且可靠的&#xff0c;处理大量消息的分布式系统&#xff0c;专注于实时处理的异步任务队列&#xff0c;同时也支持任务调度。 Celery的架构由三部分组成&#xff0c;消息中间件&#xff08;message broker&#x…

从零开始学Vue3--环境搭建

1.搭建环境 下载nodejs nodejs下载地址 更新npm npm install -g npm 设置npm源&#xff0c;加快下载速度 npm config set registry https://registry.npmmirror.com 使用脚手架创建项目 npm create vuelatest 根据你的需要选择对应选项 进入新建的项目下载依赖 npm in…

大模型时代,掌握Event Stream技术提升Web响应速度

大模型时代,每天搜索都可能会用到一种或多种大模型,在大文本输出的时候,页面是一字一字,一段一段的慢慢输出出来的,这背后是如何实现的呢?我们以KIMI为例 先抓个请求 我们发现界面展示是一句话,但是接口返回的时候是一个字一个字的。 普通请求 多了Event Stream的处理 …

机器人非线性控制方法——线性化与解耦

机器人非线性控制方法是针对具有非线性特性的机器人系统所设计的一系列控制策略。其中&#xff0c;精确线性化控制和反演控制是两种重要的方法。 1. 非线性反馈控制 该控制律采用非线性反馈控制的方法&#xff0c;将控制输入 u 分解为两个部分&#xff1a; α(x): 这是一个与…

更新web文件40秒后生效

服务器web服务使用的是nginx。 经测试&#xff0c;上传文件后大约40秒后生效。 更新文件不立即生效。 网上资料说根nginx中sendfile选项有关。 在nginx配置文件中&#xff0c;http区域里将sedfile设置为off&#xff0c;重启nginx服务。 谷歌浏览器强制刷新一次&#xff0c;…

用ControlNet+Inpaint实现stable diffusion模特换衣

用ControlNetInpaint实现stable diffusion模特换衣 ControlNet 训练与架构详解ControlNet 的架构用于文本到图像扩散的 ControlNet训练过程Zero卷积层的作用解释 inpaintInpaint Anything 的重要性Inpaint Anything 的功能概述 在现代计算机视觉领域&#xff0c;稳定扩散&#…

【计算机视觉(3)】

基于Python的OpenCV基础入门——图形与文字的绘制 图形与文字的绘制&#xff1a;画线画矩形画圆画多边形加文字 图形与文字绘制的代码实现&#xff1a; 图形与文字的绘制&#xff1a; 画线 img cv2.line(img, pt1, pt2, color, thickness) 参数&#xff1a; img&#xff1a;…

Android 构建时:Manifest merger failed : Attribute application@name value

在AndroidStudio 构建时发现此问题&#xff1a; Manifest merger failed : Attribute applicationname value解决方案&#xff1a;在主Manifest中增加replace <applicationandroid:name".MyApp"android:allowBackup"false"tools:replace"android…

儿童卧室灯品牌该如何挑选?几款专业儿童卧室灯品牌分享

近视在儿童中愈发普遍&#xff0c;许多家长开始认识到&#xff0c;除了学业成绩之外&#xff0c;孩子的视力健康同样重要。毕竟&#xff0c;学业的落后可以逐渐弥补&#xff0c;而一旦孩子近视&#xff0c;眼镜便可能成为长期伴随。因此&#xff0c;专业的护眼台灯对于每个家庭…

工作站虚拟化:RTX A5000的图形工作站实现多用户独立运行Siemens NX 设计软件

一、背景 Siemens NX 是由西门子数字工业软件&#xff08;Siemens Digital Industries Software&#xff09;开发的一款先进的集成计算机辅助设计&#xff08;CAD&#xff09;、计算机辅助制造&#xff08;CAM&#xff09;和计算机辅助工程&#xff08;CAE&#xff09;软件。它…

Python代码实现代价函数

最小二乘法 最小二乘法是一种在统计学、数学、工程学和计算机科学等领域广泛使用的优化方法。 基本原理 最小二乘法的主要目的是找到一组模型参数&#xff0c;使得根据这些参数所预测的数据与实际观测数据之间的差异&#xff08;即残差&#xff09;的平方和最小。 数学表达…

【LeetCode刷题】三数之和、四数之和

【LeetCode刷题】Day 6 题目1&#xff1a;LCR 7.三数之和思路分析&#xff1a;思路1&#xff1a;排序暴力枚举set去重思路2&#xff1a;单调性双指针细节处理去重 题目2&#xff1a;18.四数之和思路分析&#xff1a;思路1&#xff1a;排序暴力枚举set去重思路2&#xff1a;单调…

浅析智能体开发(第二部分):智能体设计模式和软件架构

大语言模型&#xff08;LLM&#xff09;驱动的智能体&#xff08;AI Agent&#xff09;展现出许多传统软件所不具备的特征。不仅与传统软件的设计理念、方法、工具和技术栈有显著的差异&#xff0c;AI原生&#xff08;AI Native&#xff09;的智能体还融入了多种新概念和技术。…

SparkSQL入门

1、SparkSQL是什么&#xff1f; 结论&#xff1a;SparkSQL 是一个即支持 SQL 又支持命令式数据处理的工具 2、SparkSQL 的适用场景&#xff1f; 结论&#xff1a;SparkSQL 适用于处理结构化数据的场景&#xff0c;而Spark 的 RDD 主要用于处理 非结构化数据 和 半结构化数据 …

【撸源码】【ThreadPoolExecutor】线程池的工作原理深度解析——上篇

1. 前言 线程池这块&#xff0c;作为高频面试题&#xff0c;并且实际使用场景巨多&#xff0c;所以出了这篇文章&#xff0c;一块来研究一下线程池的实现原理&#xff0c;运行机制&#xff0c;从底层深挖&#xff0c;不再局限于面试题。 2. 线程池概览 2.1. 构造器 线程池总…

Leecode热题100---55:跳跃游戏(贪心算法)

题目&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 贪心算…

数据采集与AI分析,亮数据+通义千问助力跨境电商前行

文章目录 前言工具介绍数据采集工具亮数据Web Scraper IDE亮点 AI数据分析工具 实战电商数据采集与AI分析电商平台选取数据采集完全托管数据集自定义数据集 AI分析 价格总结 前言 随着信息技术的飞速发展&#xff0c;数据采集与AI分析在跨境电商中扮演着越来越重要的角色。通过…

Langchain:数据连接封装、缓存封装和LCEL学习和探索

&#x1f335; 目录 &#x1f335; &#x1f60b; 数据连接封装 &#x1f354; 文档加载器&#xff1a;Document Loaders 文档处理器&#xff1a;TextSplitter 向量数据库与向量检索 总结 &#x1f349; 缓存封装&#xff1a;Memory &#x1f3d6;️ 对话上下文&#xf…

urllib_post请求_百度翻译

打开百度翻译&#xff0c;并打开控制台&#xff0c;输入spider&#xff0c;然后在网络中找到对应的接口&#xff0c;可以看出&#xff0c;该url是post请求 在此案例中找到的接口为sug&#xff0c;依据为&#xff1a; 可以看到&#xff0c;传递的数据为kw : XXX&#xff0c; 所…