ACM实训第十七天

news2024/11/17 23:35:18

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;
}

学习规划

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索生态农业,守护绿色家园

在繁忙的都市生活中&#xff0c;我们往往忽略了与自然和谐相处的重要性。而生态农业&#xff0c;正是让我们重拾与大自然亲密关系的桥梁。通过采用生态友好的耕作方式&#xff0c;生态农业不仅能够提供健康、营养的农产品&#xff0c;还能够保护生态环境&#xff0c;实现人与自…

登录安全分析报告:创蓝云智注册

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

ubuntu使用记录——如何使用wireshark网络抓包工具进行检测速腾激光雷达的ip和端口号

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言wireshark网络抓包工具1.wireshark的安装2.wireshark的使用3.更改雷达ip 总结 前言 Wireshark是一款备受赞誉的开源网络协议分析软件&#xff0c;其功能之强大…

在做题中学习(61):连续数组

525. 连续数组 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;前缀和 哈希表 转化&#xff1a;将 0 ——> -1 转变为&#xff1a;找到和为0的最长子数组 细节&#xff1a; 1.哈希表存什么 前缀和 &#xff0c; 长度 2.什么时候存入哈希表 先处理前一个&…

【LeetCode】【4】寻找两个正序数组的中位数(2105字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2 提示Python实现二分查找划分数组 个人主页&#xff1a;丷从心 系列专栏&#xff1a;LeetCode 刷题指南&#xff1a;LeetCode刷题指南 题目描述 给定两个大小分别为m和n的正序&#xff08;从小到大&#xff09;数组nums1…

基于Pytorch框架的卷积神经网络MNIST手写数字识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 MNIST手写数字数据集是机器学习领域中的一个经典数据集&#xff0c;它包含了大量的手写数字图…

Pytorch深度学习实践笔记2

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;pytorch深度学习 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibi…

正则表达式(知识总结篇)

本篇文章主要是针对初学者&#xff0c;对正则表达式的理解、作用和应用 正则表达式&#x1f31f; 一、&#x1f349;正则表达式的概述二、&#x1f349;正则表达式的语法和使用三、 &#x1f349;正则表达式的常用操作符四、&#x1f349;re库主要功能函数 一、&#x1f349;正…

【设计模式】JAVA Design Patterns——Balking(止步模式)

&#x1f50d;目的 止步模式用于防止对象在不完整或不合适的状态下执行某些代码。 &#x1f50d;解释 真实世界例子 洗衣机中有一个开始按钮&#xff0c;用于启动衣物洗涤。当洗衣机处于非活动状态时&#xff0c;按钮将按预期工作&#xff0c;但是如果已经在洗涤&#xff0c;则…

从零到一:手把手教你将项目部署上线-环境准备

部署步骤 引言1.Java环境配置2.ngnix安装好书推荐 引言 将自己的项目从本地开发环境顺利部署上线&#xff0c;是每个开发者必经的里程碑。今天&#xff0c;我们就从零开始&#xff0c;一步一步教你如何将手中的项目部署到线上&#xff0c;让全世界见证你的创造力。 首先&#x…

3D 高斯泼溅(Gaussian Splatting)-3D重建的3DGS时代

3D重建自从NeRfs出现之后又热闹了一次&#xff0c;3D GS技术一时间燃变了整个三维重建和Slam领域&#xff0c;几个月不见&#xff0c;沧海桑田。 NeRF貌似已成为过去式&#xff0c;三维重建进入了3DGS时代&#xff0c;且3DGS在各方面比NeRF落地更快。3D 高斯泼溅&#xff08;S…

Payload SDK dji

开发硬件 感谢您的耐心等待&#xff0c;建议您可以考虑下树莓派4B或Jetson Nano开发板&#xff0c;看您需求选择&#xff0c;OSDK即将停止服务&#xff0c;我们建议您使用PSDK来进行开发&#xff0c;PSDK包含了OSDK的功能。Payload SDK 感谢您对大疆产品的支持&#xff01;祝…

DOS学习-目录与文件应用操作经典案例-type

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…

获取日期区间的所有日期

借助moment.js 转换指定格式&#xff0c;首先安装npm install moment --save methods:{enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate&#xff0c;且二者不相等let daysList [];let SDate this.$moment(startDate);let EDate …

CentOS7安装内网穿透实现远程推送镜像到本地Docker Registry

文章目录 前言1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 前言 本文主要介绍如何部署Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现…

顶顶通实时质检系统-黑名单拦截功能配置流程

文章目录 前言联系我们配置流程一、黑名单导入二、白名单导入三、外部黑名单四、靓号规则五、创建拦截规则六、拦截条件七、功能配置 拦截记录与统计拦截记录拦截统计 前言 上篇文章讲解了顶顶通实时质检系统黑名单的功能介绍&#xff0c;本篇文章主要讲解顶顶通黑名单拦截功能…

C++入门:从C语言到C++的过渡(1)

目录 1.什么是C 2.C的标准库 3.命名空间 3.1为什么要存在命名空间 3.2命名空间的定义 3.3命名空间的使用 3.3.1域作用限定符 3.3.2using关键字引入某个成员 3.3.3using关键字引入命名空间名称 3.4命名空间的嵌套 3.5命名空间的合并 4.C中的输入与输出 1.什么是C C&am…

Ansible自动化运维中的file文件模块模块应用详解

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月21日15点21分 &#x1f4af;趣站推荐&#x1f4af; 前些天发现了一个巨牛的&#x1f916;人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xf…

jmeter线程组(下篇)

线程组 线程组作为JMeter测试计划的核心组件之一&#xff0c;对于模拟并发用户的行为至关重要。线程组元件是整个测试计划的入口&#xff0c;所有的取样器和控制器必须放置在线程组下。 可以将线程组视为一个虚拟用户池&#xff0c;其中每个线程可被理解为一个虚拟用户&#x…