英文原题 中文题译
大意:在长01串中找长度在A,B之间的子串的重复次数,按顺序输出最大的N个重复次数,且输出相应的子串,要求相同的子串按二进制大小排列输出(每行6个)。
数据限制:1 <= A <= B <= 12,1 <= N < 50,字符串最大长度200,000
例子:
2 4 2
01010010010001000111101100001010011001111000010010011110010000000
输出:
23
00
15
01 10
表示,00出现23次最多,其次01,10各出现15次。
很显然用tries来做是最合适的,长度最大为12,tries的每个节点含2个子节点,构成一个完全树,节点数为2^13-1个。
思路很顺,写的也很顺,不过还是提交了好多次,在格式上犯了N次错,sigh。之后看了看标程的代码,它不是用tries做的,而是用位操作,恩,充分的利用了01的特点,也很快,编程上比tries还简单,特别是在计数的时候不需要遍历,输出时也更简单。的确比用tries高明。再次体现了:什么是最合适的。受教了。
大意:在长01串中找长度在A,B之间的子串的重复次数,按顺序输出最大的N个重复次数,且输出相应的子串,要求相同的子串按二进制大小排列输出(每行6个)。
数据限制:1 <= A <= B <= 12,1 <= N < 50,字符串最大长度200,000
例子:
2 4 2
01010010010001000111101100001010011001111000010010011110010000000
输出:
23
00
15
01 10
表示,00出现23次最多,其次01,10各出现15次。
很显然用tries来做是最合适的,长度最大为12,tries的每个节点含2个子节点,构成一个完全树,节点数为2^13-1个。
思路很顺,写的也很顺,不过还是提交了好多次,在格式上犯了N次错,sigh。之后看了看标程的代码,它不是用tries做的,而是用位操作,恩,充分的利用了01的特点,也很快,编程上比tries还简单,特别是在计数的时候不需要遍历,输出时也更简单。的确比用tries高明。再次体现了:什么是最合适的。受教了。
/* ID: blackco3 TASK: contact LANG: C++ */ #include <iostream> #include <memory.h> #include <string.h> #include <stdlib.h> using namespace std; #define _max_pattern_ 13 #define _max_seq_len_ 200001 char sequence[_max_seq_len_] ; int seq_size, low, up, n_th ; struct t_tries { int count ; t_tries *next[2] ; } tries_buf[(1<<_max_pattern_)+1] ; void build_tries( int height ){ for( int pos=1; pos<(1<<(height+1)); pos++ ){ tries_buf[pos].count=0; if( (pos<<1)>=(1<<(height+1)) ) tries_buf[pos].next[0] = tries_buf[pos].next[1] = 0 ; else tries_buf[pos].next[0] = tries_buf+(pos<<1), tries_buf[pos].next[1] = tries_buf+(pos<<1)+1 ; } } struct t_pattern { int times, len ; char str[_max_pattern_+1]; } patterns[(1<<_max_pattern_)+1], *p_patterns[(1<<_max_pattern_)+1]; typedef t_pattern *tp_pattern ; int p_pattern_comp( const void * pt1, const void * pt2){ tp_pattern p1=*(tp_pattern*)pt1, p2=*(tp_pattern*)pt2; if( p1->times != p2->times ) return p1->times - p2->times ; if( p1->len != p2->len ) return p2->len - p1->len ; return -strcmp(p1->str, p2->str); } int n_pattern=0; char cur_pattern[_max_pattern_+1]; void get_count( t_tries *pc, int height) { if( height>up ) return ; if( height>=low && pc->count ){ patterns[n_pattern].times = pc->count, patterns[n_pattern].len = height; memcpy( patterns[n_pattern].str, cur_pattern, height ); patterns[n_pattern++].str[height] = '\0' ; } cur_pattern[height]='0'; get_count( pc->next[0], height+1 ); cur_pattern[height]='1'; get_count( pc->next[1], height+1 ); } int main() { freopen("contact.in", "r", stdin); freopen("contact.out", "w", stdout); cin >> low >> up >> n_th ; char *p_seq=sequence ; while ( cin >> p_seq ) p_seq += strlen( p_seq ); seq_size = p_seq-sequence ; for( p_seq=sequence; *p_seq!='\0'; p_seq++ ) *p_seq -= '0' ; *p_seq = -1 ; build_tries(up) ; char *p_end=p_seq+seq_size-low ; for( p_seq=sequence; p_seq<p_end && *p_seq!=-1; p_seq++ ) { register t_tries *p_trie=tries_buf+1 ; for( register char *pc=p_seq; pc<p_seq+up && *pc!=-1; pc++ ) p_trie=p_trie->next[*pc], p_trie->count++ ; } get_count(tries_buf+1,0); for( int i=0; i<n_pattern; i++){ p_patterns[i] = patterns+i ; } qsort( p_patterns, n_pattern, sizeof(tp_pattern), p_pattern_comp ); for( int i=n_pattern-1, pre_times=0, pc=0, tc=0; i>=0; i-- ){ if( pre_times != p_patterns[i]->times ) { if( pc && tc ) cout << endl ; if( pc==n_th ) break ; cout << p_patterns[i]->times << endl ; pre_times=p_patterns[i]->times, pc++, tc=0 ; } if( tc ) cout << " " ; cout << p_patterns[i]->str , tc++; if( tc==6 || !i ) cout << endl , tc=0 ; } return 0; }
发表评论
-
USACO Training Section 4.2 Cowcycles
2010-01-31 21:11 888英文原题 中文题译 ... -
USACO Training Section 4.2 Job Processing
2010-01-30 17:31 1136英文原题 中文题译 大意: 有N个工件,每个工件要经 ... -
USACO Training Section 4.2 Drainage Ditches ISAP非递归和多路增广递归
2010-01-29 19:39 1852郁闷。不小心覆盖了重 ... -
USACO Training Section 4.2 The Perfect Stall 匈牙利算法的递归和非递归实现
2010-01-28 21:21 1647英文原题 中文题译 ... -
USACO Training Section 4.1 Cryptcowgraphy 奶牛密码
2010-01-27 20:58 1200英文原题 中文题译 大意: 奶牛们要从农场逃跑 ... -
USACO Training Section 4.1 Beef McNuggets
2010-01-26 21:37 975英文原题 中文题译 大意: 给定N个正整数, ... -
USACO Training Section 4.1 Fence Loops
2010-01-24 20:14 1074英文原题 大意: 农夫布朗的牧场上的篱笆已经失 ... -
USACO Training Section 3.4 Closed Fences
2010-01-23 17:50 1408英文原题 题意 一个 ... -
USACO Training Section 3.4 American Heritage
2010-01-21 23:19 786英文原题 大意:有一个由最多26个大写字母构成的二叉树 ... -
USACO Training Section 3.4 Raucous Rockers
2010-01-21 23:09 801英文原题 大意:有S首歌,要放到D个CD里。每首歌有一个 ... -
USACO Training Section 3.4 Electric Fence
2010-01-21 12:57 976英文原题 大意:给定一个三角形(0,0),(m,n),( ... -
USACO Training Section 3.3 Riding the Fences
2010-01-20 23:38 1211英文原题 中文题译 经典的求欧拉路径:给定最多两个奇 ... -
USACO Training Section 3.3 Shopping Offers
2010-01-19 22:18 919英文原题 中文题译 这是个与日常生活相关的题。商场促销 ... -
USACO Training Section 3.3 A Game
2010-01-19 20:54 1097英文原题 有如下一个双人游戏:N(2 <= N & ... -
USACO Training Section 3.3 Home on the Range
2010-01-19 19:36 778英文原题 中文题译 大意:给定一个01矩阵,计算其中全为 ... -
USACO Training Section 3.3 Camelot
2010-01-19 03:39 1235英文原题 中文题译 ... -
USACO Training Section 3.2 Sweet Butter
2010-01-19 00:10 1051英文原题 中文题译 大意:农场之间有路构成稀疏无向图,若 ... -
USACO Training Section 3.2 Magic Squares
2010-01-18 23:11 934英文原题 中文题译 大意:有人发明了一种有8个块三种变换 ... -
USACO Training Section 3.2 Feed Ratios
2010-01-18 20:52 1312英文原题 中文题译 大意:给出整数a[i][j]和 ... -
USACO Training Section 3.2 Spinning Wheels
2010-01-18 19:37 871英文原题 中文题译 大意:有五个纺车飞轮,每个都有最多五 ...
相关推荐
ACM----USACO Training(解题博客网),提供了USACO Training解题的代码,可以参考一下
USACO全部译题 USACO Training Program Gateway
自己写的usaco_training带代码。供参考,有一道题是cheat的。自己看吧。
usaco测试数据+标程 usaco的section1到section5的所有测试数据 以及标准程序
usaco解题报告,就是usaco.training.gateway上面的题目全解
USACO题解+代码+翻译,好东西,超级齐全,对大家帮助不小,特别是现在nocow挂了
usaco section2.3--section5.5源程序。。。。。。。。。。。。。。。。
[USACO 1.1.4]破碎的项链.cpp
做的很辛苦, 里面附有注释,大家支持一下吧...
本章主要衔接第二章,题目类型不定描述农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他
USACO_培训USACO_培训Ride.java-> Gift1.java->
3.1 Section 3.1 3.2 Section 3.2 3.3 Section 3.3 3.4 Section 3.4 4 Chapter4 4.1 Section 4.1 4.2 Section 4.2 4.3 Section 4.3 4.4 Section 4.4 5 Chapter5 5.1 Section 5.1 5.2 Section 5.2 5.3 Section 5.3 ...
USACO training 教程翻译合集(清晰明确)
USACO培训页面美国计算机奥林匹克训练页2015年6月17日开始
One of the answer of the USACO training exercises.
usaco 合集,包括英文原题和中文译题,测试数据以及答案,很全啊!usaco 合集usaco 合集usaco 合集usaco 合集
usaco历年测试数据
USACO题集及答案
usaco 2010-2011 nov news,喜欢usaco的朋友可以看看
某些USACO题目的答案,很详细,代码清晰结构良好,算法高效易于调试