It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In order to exercise greater control over its citizens and thereby to counter a chronic breakdown in law and order, the Government decides on a radical measure--all citizens are to have a tiny microcomputer surgically implanted in their left wrists. This computer will contains all sorts of personal information as well as a transmitter which will allow people's movements to be logged and monitored by a central computer. (A desirable side effect of this process is that it will shorten the dole queue for plastic surgeons.)
An essential component of each computer will be a unique identification code, consisting of up to 50 characters drawn from the 26 lower case letters. The set of characters for any given code is chosen somewhat haphazardly. The complicated way in which the code is imprinted into the chip makes it much easier for the manufacturer to produce codes which are rearrangements of other codes than to produce new codes with a different selection of letters. Thus, once a set of letters has been chosen all possible codes derivable from it are used before changing the set.
For example, suppose it is decided that a code will contain exactly 3 occurrences of `a', 2 of `b' and 1 of `c', then three of the allowable 60 codes under these conditions are:
abaabc abaacb ababac
These three codes are listed from top to bottom in alphabetic order. Among all codes generated with this set of characters, these codes appear consecutively in this order.
Write a program to assist in the issuing of these identification codes. Your program will accept a sequence of no more than 50 lower case letters (which may contain repeated characters) and print the successor code if one exists or the message `No Successor' if the given code is the last in the sequence for that set of characters.
Input and Output
Input will consist of a series of lines each containing a string representing a code. The entire file will be terminated by a line consisting of a single #.
Output will consist of one line for each code read containing the successor code or the words `No Successor'.
Sample input
abaacb cbbaa #
Sample output
ababac No Successor
从后向前,找到不再递增的元素x。再从后向前,找到第一个比x大的元素y。
然后把x与y交换。把x+1到末尾的元素按从小到大的顺序排序。
#define RUN #ifdef RUN #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <string> #include <iostream> #include <sstream> #include <map> #include <set> #include <vector> #include <list> #include <cctype> #include <algorithm> #include <utility> #include <math.h> #include <ctime> using namespace std; #define MAXN 110 char buf[MAXN]; int cmp( const void *a , const void *b ) { return *(char *)a - *(char *)b; } void play(){ int i, j; for(i=strlen(buf)-1; i>0; i--){ //buf[i-1]是要被调到后面的元素 if(buf[i-1] < buf[i]){ //printf("%d\n", i); break; } } for(j=strlen(buf)-1; j>0; j--){ if(buf[j] > buf[i-1]){ break; } } if(i==0 || j==0){ printf("No Successor\n"); } else{ char c = buf[i-1]; buf[i-1] = buf[j]; buf[j] = c; //从i到末尾做从小到大的排序 //cout << "buf[i]:" << buf[i] << endl; //cout << "strlen(buf)-i:" << strlen(buf)-i << endl; qsort(&buf[i], strlen(buf)-i, sizeof(buf[0]), cmp); printf("%s\n", buf); } } int main(){ #ifndef ONLINE_JUDGE freopen("146.in", "r", stdin); freopen("out.out", "w", stdout); #endif memset(buf, 0, sizeof(buf)); while(scanf("%s", buf) != EOF){ if(buf[0] == '#'){ break; } play(); //printf("%s\n", buf); memset(buf, 0, sizeof(buf)); } } #endif
相关推荐
Error-Correcting Codes, by Professor Peterson, was originally published in 1961. Now, with E. J. Weldon, Jr., as his coauthor, Professor Peterson has extensively rewritten his material. The book ...
一本详细讲述Reed-Solomon codes的书,包括其应用!
单bit错误校正,多bit错误检测的ECC算法论文;比传统的Hamming更加简洁、高效。
有关数据压缩中的变长编码算法。很好的英文原版书籍,下来看看吧。
Fundamentals of Error-Correcting Codes
This book is intended to introduce space-time coding and multiantenna systems. The endeavor is to impart a working knowledge of the subject not just for students and researchers but for the entire ...
Fundamentals of Error-Correcting Codes Fundamentals of Error-Correcting Codes is an in-depth introduction to coding theory from both an engineering and mathematical viewpoint. As well as covering ...
书名:Turbo-like Codes, Design for High Speed Decoding 作者:Aliazam Abbasfar 本书供学习编码尤其是想了解turbo codes的专业人士参考。
Design of low-density parity-check codes for modulation and detection.pdf
A method for the construction of minimum-redundancy codes
Galleger的博士论文,LDPC。做了整理
初学空时编码的很好的资料,MIMO的入门教程!
github-recovery-codes.txt
纠错码经典书籍,SLONE教授早期经典著作,非常值得一看
一本很好的编码教程
AVAYA CM feature-access-codes 命令内容简介
Reed-Solomon Codes by Bernard Sklar. Bernard Sklar is the author of Digital Communications: Fundamentals and Applications, Second Edition.
这是关于纠错编码的电子书,高清,最新版本,经典著作,英文版