题解:http://blog.csdn.net/u013480600/article/details/23122503 我的代码一直TLE,,,看了人家的之后,认为1.链式前向星比較好,2.*depth而不是每过一个节点就计算,这一点非常好 我是基本copy别人的代码,自己加了凝视,留个记号,随后重写, 这道题相同作为链式前向星的Trie的模板 #include <cstdio> #include <cstring> #include <iostream> using…
UVA 11732 - strcmp() Anyone? 题目链接 题意:给定一些字符串,要求两两比較,须要比較的总次数(注意.假设一个字符同样.实际上要还要和'\0'比一次,相当比2次) 思路:建Trie树,每次建树过程中.后继后继结点就是同样结点须要比較两次ans + val * 2.否则就是不同结点ans + val,建完树就计算完了 代码: #include <cstdio> #include <cstring> const int N = 1005; const int…
题目地址: option=com_onlinejudge&Itemid=8&category=117&page=show_problem&problem=2832">UVA 11732 strcmp() Anyone? 题意:  问strcmp函数的==语句运行了几次. 分析:  大白上的题目.  听说要用左儿子右兄弟的Trie.比較省空间.顺便学了下. 一边insert一边统计. #include <cstdio> #include <c…
题意:给定strcmp函数,输入n个字符串,让你用给定的strcmp函数判断字符比较了多少次. 析:题意不理解的可以阅读原题https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2832 字符串很多,又很长,如果按照题目的意思两两比较,肯定会TLE,所以要用前缀树(Trie)来解决,当然只是用简单的前缀树也会TLE的, 我们必须对其进行优化,看了…
strcmp() Anyone? strcmp() is a library function in C/C++ which compares two strings. It takes two strings as input parameter and decides which one is lexicographically larger or smaller: If the first string is greater then it returns a positive value…
input n 2<=n<=4000 s1 s2 ... sn 1<=len(si)<=1000 output 输出用strcmp()两两比较si,sj(i!=j)要比较的次数,结果在long long范围内(相同字符比较两次,不相同字符比较一次,包括'\0') 做法:由于字符集太大,要用左兄弟右儿子的trie保存字符,不用每次都开ch[62]个孩子 #include <cstdio> #include <queue> #include <cstrin…
https://vjudge.net/problem/UVA-11732 题意 给定n个字符串,问用strcmp函数比较这些字符串共用多少次比较. strcmp函数的实现 int strcmp(char *s, char *t) { int i; ; s[i]==t[i]; i++) if (s[i]=='\0') ; return s[i] - t[i]; } 分析 建trie树,把‘\0’也加进去,记录以每个节点为子树包含的单词节点. 然后dfs计数,遇到单词节点,说明可能存在相同的字符串,…
题目传送门 题意:询问所有字符串的比较次数和(注意for循环内的比较也算) 分析:将所有字符串插入到字典树上,然后结点信息记录有几个字符串,那么每走到一个结点就能知道比较到此时需要的次数.学习到链表存结点 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 4e3 + 5; const int M = 1e3 + 5; const int NODE = N * M; struct T…
先两两比较,比较次数是两者相同的最长前缀长度*2+1,比较特殊的情况是两者完全相同时候比较次数是单词长度*2+2, 两个单词'末尾\0'和'\0'比较一次,s尾部'\0'和循环内'\0'比较一次. 因此,对于一个单词,只要知道和它某个相同的最长前缀的单词数就可以计算出方案数了. 用tire,记录一颗子树上的结点数cnt[u](用于计算当前前缀是最长前缀的单词数)和在某个结点终止的单词数val[u](处理特殊情况). 因为字符集比较大,可能会有较大的空间浪费,所以用一个链式的结构保存子节点.(查找…
传送门:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2832 题目大意: 给定strcmp实现如下: int strcmp(char *s, char *t) { int i; for (i=0; s[i]==t[i]; i++) if (s[i]=='\0') return 0; return s[i] - t[i]; } 给定n个字符…
strcmp() Anyone? Time Limit: 2000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Description   J “strcmp()” Anyone? Input: Standard Input Output: Standard Output strcmp() is a library function in C/C++ which…
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2832 按照正常的字典树建树会MLE 所以需要采用树的压缩算法来建树 #include <cstdio> #include <iostream> #include <cstring> #define maxn 4000010 #define ma…
题目链接:https://vjudge.net/contest/158125#problem/A 题意: 系统中,strcmp函数是这样执行的,给定 n 个字符串,求两两比较时,strcmp函数要比较多少次? 如: t  h  a  n  \n       t  h  e  r  e  \n t  h  a  t  \n        t  h  e  \n 2  2  2  1            2  2  2  1 直接两两比较是超时的. 可以这样建立一个字典树: 可以发现一直要比较到交…
#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<vector> using namespace std; * + ; int n; long long ans; struct Trie { int head[maxn]; //head[i]为第i个结点的左儿子编号 int next[maxn]; //next[i]为第i个结点的右…
UVA.699 The Falling Leaves (二叉树 思维题) 题意分析 理解题意花了好半天,其实就是求建完树后再一条竖线上的所有节点的权值之和,如果按照普通的建树然后在计算的方法,是不方便实现的,思维转换,在数组中实现,从根节点,向左的话即在a[root-1]的位置累加上节点权值,再向左即在a[root-2]位置累加权值,向右则在a[root+1]的位置累加权值,以此类推,方可实现求和的要求. 代码总览 #include <cstdio> #include <cstring&…
UVA.679 Dropping Balls (二叉树 思维题) 题意分析 给出深度为D的完全二叉树,按照以下规则,求第I个小球下落在那个叶子节点. 1. 默认所有节点的开关均处于关闭状态. 2. 若有小球下落在关闭状态的节点时,走向其左子树,否则走向其右子树. 3. 小球下落到某个节点,通过后开关反转. 模拟肯定不行,要根据树的特点和下落规则找简单办法.首先一个球下来,开关的状态要么是开要么是关,而且是交替进行,于是小球走的方向,是与小球是当前节点第几个球是有关系的.不难发现,对于每一个节点来…
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2832 题意:模拟strcmp()函数,给n个字符串,两两之间进行比較,问须要进行多少次比較? 解析:字符串非常多,数据量大.按题意两两比較显然不现实.假设把全部的单词插入到一棵Trie里面会怎么样呢?考虑than和that相应的结点,than和that的前3个字符是一样的,但第4…
给你n个单词,让他们两两比较,要求他们运用strcmp时,进行比较的次数. 边建树边统计 #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include <stack> #include <queue>…
一開始不知道这样的一维建树方法. 每次一层用一个链指向下一层最左边的结点,之后每一层用一个链表串联全部的结点,这样就建树成功了. 14328524 11732 option=com_onlinejudge&Itemid=8&page=show_problem&problem=2832" style="font-size:13.3333330154419px; margin:0px; padding:0px; color:rgb(153,0,0); text-de…
字典树问题 对于普通的字典树,可以加一个vector数组记录非空的孩子,加快速度 还可以用左孩子右兄弟来节省空间,因为普通的trie的话是 int next[MAXN][26] 而左孩子右兄弟可以把[26]省掉,这题实际上并不需要这么节省也可以AC #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<vector> #define MA…
题意:求N个字符串两两比较,共比较了多少次? #include<iostream> #include<cstring> #include<cstdio> using namespace std; typedef long long LL; * + ; // 字母表为全体小写字母的Trie struct Trie { int head[maxnode]; // head[i]为第i个结点的左儿子编号 int next[maxnode]; // next[i]为第i个结点的…
解题思路: 首先我们可以发现: 1.若两个字符串A.B不相等,且它们的公共前缀为S,则它们的比较次数为:2 * len(S) + 1: 2.若两个字符串相等,设为A,则它们的比较次数为 2 * ( len(A) + 1 )    //注意考虑结束符'\0' 那么我们可以建立前缀树,在向前缀树中插入字符串的过程中,如果遇到分叉结点则需要进行比较. 特别注意:"aaaa","aa"以及"aaaa","aaaa"的情况 具体做法:…
这道题也是卡了挺久的. 给出一个字符串比较的算法,有n个字符串两两比较一次,问一共会有多少次比较. 因为节点会很多,所以Tire树采用了左儿子右兄弟的表示法来节省空间. 假设两个不相等的字符串的最长公共前缀的长度为i,那么比较次数应该是2i+1. 如果两个字符串相等,比较次数则是2i+2. 可以像大白书上一样先构建好Tire树,然后DFS统计答案. #include <cstdio> #include <cstring> * + ; struct Tire { int sz; in…
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1323 题意 长方形l * w,给出长方形中间那条线上n个圆的圆心c和半径r,选取最少数目的圆覆盖长方形,选不了输出-1 思路 明显,算出圆在边上的坐标,然后尽量从左向右扩展就行 感想: 卡题的原因是反射性以为r和w很小,但其实可以很大,所以用double存r 代码 #include…
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Description Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges' favorite time is…
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABB4AAAM9CAYAAAA7ObAlAAAgAElEQVR4nOyd25GsupKGywVswAV8wARswAU8wAM8IOZ9sAAHeJ4IPMCHnIcdPysrK3UDUUVV5xfRcc5eTUNKypsSSTzIMAzDMAzDMAzDMAzjIh6fFsAwDMMwDMMwDMMwjN/FCg+GYRiGYRiGYRiGYVyGFR4MwzAMwzAMwzAMw7gMKzwYhmEYhmEYh…
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHIAAAHDCAYAAABI5T2bAAAgAElEQVR4nOydPY7svLW1awQGNABHCm…
题目很简单,给一个队列以及文件的位置,然后一个一个检查,如果第一个是优先级最高的就打印,否则放到队列后面,求所要打印的文件打印需要花费多长时间. 这里我用数组模拟队列实现,考虑到最糟糕的情况,必须把数组开到maxn*maxn.另外当所要打印的文件优先级不是最高的时候也需要排列到后面. 0.016s. 代码: #include <cstdio> const int maxn = 101; int t, n, m, time; int q[maxn*maxn]; int print() { int…
题意:蚂蚁在木棍上爬,速度1cm/s,给出木棍长度和每只蚂蚁的位置,问蚂蚁全部下木棍的最长时间和最短时间. 模拟一下,发现其实灰常水的贪心... 不能直接求最大和最小的= =.只要求出每只蚂蚁都走长路下木棍时的最大值,和走短路时的就行了. 代码: /* * Author: illuz <iilluzen@gmail.com> * Blog: http://blog.csdn.net/hcbbt * File: uva10714.cpp * Lauguage: C/C++ * Create Da…
https://vjudge.net/problem/UVA-11488 题意: 给定一个字符串集合S,定义P(s)为所有字符串的公共前缀长度与S中字符串个数的乘积.比如P( {000, 001, 0011} ) = 6.给n个01串,从中选择一个集合S,使得P(S)最大. 思路: 建立字典树,边插入边统计答案即可. 用两个变量分别记录前缀数量和前缀长度,每次插入时动态更新两者乘积. #include<iostream> #include<cstdio> #include<c…