zoukankan      html  css  js  c++  java
  • POJ 1256

    //#include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    #define N_MAX 14
    #define M_MAX 58
    int T;
    int len;
    char buf[N_MAX];
    int ret[N_MAX];
    int aa[M_MAX]; //字符=>数字的映射
    int bb[M_MAX]; //数字=>字符的映射
    char *in = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
    
    void init() // 映射
    {
    	int len = strlen(in);
    	int val = 0;
    	for (int i = 0; i < len; i++) {
    		int idx = in[i] - 'A';
    		bb[val] = in[i];
    		aa[idx] = val++;
    	}
    }
    
    void qsort(int *a, int begin, int end)
    {
    	if (begin >= end) return;
    	int l = begin, r = end, k = a[l];
    	while (l < r) {
    		while (l < r && k <= a[r]) r--;
    		while (l < r && k >= a[l]) l++;
    		if (l < r) {
    			int tmp = a[l];
    			a[l] = a[r];
    			a[r] = tmp;
    		}
    	}
    	a[begin] = a[l];
    	a[l] = k;
    	qsort(a, begin, l - 1);
    	qsort(a, l + 1, end);
    }
    
    void to_ret()
    {
    	for (int i = 0; i < len; i++) {
    		int idx = buf[i] - 'A';
    		ret[i] = aa[idx];
    		//printf("%d
    ", ret[i]);
    	}
    
    	qsort(ret, 0, len - 1);
    }
    
    void print_ret()
    {
    	for (int i = 0; i < len; i++) {
    		printf("%d", ret[i]);
    	}
    	printf("
    ");
    }
    
    void print_()
    {
    	for (int i = 0; i < len; i++) {
    		int idx = ret[i];
    		printf("%c", bb[idx]);
    	}
    	printf("
    ");
    }
    
    int main(int argc, char* argv[])
    {
    	//setbuf(stdout, NULL);
    	//freopen("sample_input.txt", "r", stdin);
    
    	int T = 0;
    	scanf("%d", &T);
    	init();
    	while (T--) {
    		memset(buf, 0, sizeof(char) * N_MAX);
    		memset(ret, 0, sizeof(char) * N_MAX);
    		scanf("%s", buf);
    		//printf("buf = %s
    ", buf);
    
    		len = strlen(buf);
    
    		to_ret();
    
    		print_();
    
    		while (1)
    		{
    			int i = len - 1;
    			for (; i >= 0; i--) {
    				if (ret[i] > ret[i - 1]) {
    					break;
    				}
    			}
    
    			if (i == 0) {
    				break;
    			}
    
    			int min = 'z';
    			int l = i - 1;
    			int r = i;
    			for (int j = i; j < len; j++) {
    				if (ret[j] > ret[l] && ret[j] < min) {
    					min = ret[j];
    					r = j;
    				}
    			}
    
    			int tmp = ret[l];
    			ret[l] = ret[r];
    			ret[r] = tmp;
    			
    			qsort(ret, i, len - 1);
    			print_();
    		}
    	}
    
    	return 0;
    }
    
  • 相关阅读:
    感悟
    shadow classification
    interpolation
    c语言调试技巧
    注册博客园
    用jQuery实现图片预加载和等比例缩小,大图可以点击关闭
    焦点图,带数字显示,支持常见浏览器
    又一个jquery轮播效果,焦点图,带数字显示序号,这个可以添加对应标题在图片上,支持主流浏览器
    纯css下拉菜单,支持CSS3圆角
    Jquery 下拉菜单,可以设置颜色,支持CSS3圆角
  • 原文地址:https://www.cnblogs.com/jingyg/p/7723137.html
Copyright © 2011-2022 走看看