SDUTOJ 3059 C#中类的继承性 ——字典树(哈希用法),map

2024-08-24 23:18

本文主要是介绍SDUTOJ 3059 C#中类的继承性 ——字典树(哈希用法),map,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C#中类的继承性

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

在C#中,类的继承遵循以下原则。
(1)派生类只能从一个类中继承,即单继承。
(2)类的继承是可以传递的,例如:假设类C继承于类B,类B又继承于类A,那么类A是类C的祖先类。
 
那么现在问题来了,给出一些类的继承关系,求出最多的继承层数。

输入

多组输入。

对于每组输入。

第一行输入一个整数n(1 <= n <= 50000)。

接下来的n行,每行只会符合下面两种格式:

(1) 仅包含一个类名。此时表明此类是基类,即不继承与任何类。

(2) 类名: 类名B。此时表明类A继承于类B

类名仅由小写英文字母且长度 <= 6。

数据保证合法。

输出

对于每组数据,输出最多的继承层数。

示例输入

2abcxyz:abc

示例输出

2

提示

 

来源

 zmx

#include <stdio.h>
#include <string.h>struct node
{int flag;int next[26];
}ls[6000010];int pr[50010];
int top,num;int creat(char sr[])
{int xb = 0,zh;char *p = sr;while(*p != '\0'){zh = *p - 'a';if(!ls[xb].next[zh]){ls[top].flag = 0;memset(ls[top].next,0,sizeof(ls[top].next));ls[xb].next[zh] = top++;}xb = ls[xb].next[zh];p++;}if(!ls[xb].flag)ls[xb].flag = num++;return ls[xb].flag;
}int main()
{char str[15];char sr1[10],sr2[10];int n;while(~scanf("%d",&n)){num = 1;memset(ls[0].next,0,sizeof(ls[0].next));top = 1;int mx = -(1 << 28);for(int i = 0;i < n;i++){scanf("%s",str);char *p = str;char *q = sr1;while(*p != '\0'){if(*p == ':')break;*q = *p;p++;q++;}*q = '\0';if(*p != '\0'){q = sr2;p++;while(*p != '\0'){*q = *p;p++;q++;}*q = '\0';int x = creat(sr1);int y = creat(sr2);// printf("pr[y] = %d\n",pr[y]);pr[x] = pr[y] + 1;if(mx < pr[x])mx = pr[x];}else{int x = creat(sr1);pr[x] = 1;}}printf("%d\n",mx);}return 0;
}

当时想多了,比赛完后才发现。。。。。就是用字典树  就是自己想多了。。。。。。不多解释

C++STL中的map也能过。。。。。

这篇关于SDUTOJ 3059 C#中类的继承性 ——字典树(哈希用法),map的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103882

相关文章

Java Map排序如何按照值按照键排序

《JavaMap排序如何按照值按照键排序》该文章主要介绍Java中三种Map(HashMap、LinkedHashMap、TreeMap)的默认排序行为及实现按键排序和按值排序的方法,每种方法结合实... 目录一、先理清 3 种 Map 的默认排序行为二、按「键」排序的实现方式1. 方式 1:用 TreeM

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Java8 Collectors.toMap() 的两种用法

《Java8Collectors.toMap()的两种用法》Collectors.toMap():JDK8中提供,用于将Stream流转换为Map,本文给大家介绍Java8Collector... 目录一、简单介绍用法1:根据某一属性,对对象的实例或属性做映射用法2:根据某一属性,对对象集合进行去重二、Du

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的