p1477.cpp
来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 68 行
CPP
68 行
#include <iostream>
#include <string>
using namespace std;
//#define DEBUG
#ifdef DEBUG
#include <fstream>
ifstream in ( "p.in" );
ofstream out ( "p.out" );
#define cin in
#define cout out
#endif
string Order , Code;
int Num [110] , len;
bool Used [110];
void Sort ()
{
int i , j , t;
bool flag;
for ( i = 0; i < len; i ++ ) Num [i] = i;
for ( i = 0; i < len; i ++ ) {
flag = false;
for ( j = len - 2; j >= i; j -- )
if ( Code [Num [j]] > Code [Num [j + 1]] )
t = Num [j] , Num [j] = Num [j + 1] , Num [j + 1] = t , flag = true;
if ( !flag ) return;
}
}
string EnCode ()
{
string Ret;
Ret.resize( len );
for ( int i = 0; i < len; i ++ )
Ret [i] = Num [i] ? Code [Num [i] - 1] : Code [len - 1];
return Ret;
}
string DeCode ()
{
string Ret;
Ret.resize( len );
int i , j , k;
char Next;
memset ( Used , 0 , sizeof ( Used ));
for ( i = 0; Code [Num [i]] != Code [len]; i ++ );
for ( k = 1 , j = 0; k < len; k ++ ) {
Used [i] = true , Ret [j] = Code [Num [i]];
if ( j ) j --; else j = len - 1;
for ( Next = Code [i] , i = len - 1; Used [i] || Code [Num [i]] != Next; i -- );
} Ret [j] = Code [Num [i]];
return Ret;
}
main ()
{
while ( cin >> Order >> Code ) {
len = Code.length();
if ( Order == "decode" ) len --;
Sort ();
if ( Order == "encode" ) cout << EnCode () << endl;
else cout << DeCode () << endl;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?