zoukankan      html  css  js  c++  java
  • UVA 11925 Generating Permutations

    https://vjudge.net/problem/UVA-11925

    题目

    给出一个$1,2,3,cdots,n$的排列,要求输出一串操作,使${1,2,3,cdots,n}$变为给定的排列。

    1:交换前两个元素的位置,2:把第一个元素放至末尾。

    题解

    联想冒泡排序……

    需要把给的排列转化为顺序排列,顺序排列转化为另外一个乱序排列

    (但是如果元素可以重复又该怎么办呢……)

    AC代码

    #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
    #include<bits/stdc++.h>
    using namespace std;
    #define REP(r,x,y) for(register int r=(x); r<(y); r++)
    #define REPE(r,x,y) for(register int r=(x); r<=(y); r++)
    #ifdef sahdsg
    #define DBG(...) printf(__VA_ARGS__)
    #else
    #define DBG(...)
    #endif
    
    template<class T>
    inline void read(T &x) {
    	char ch = getchar();
    	x=0;
    	int f=1;
    	while(!isdigit(ch) && ch!='-') ch=getchar();
    	if(ch=='-') f=-1,ch=getchar();
    	while(isdigit(ch)) {
    		x=x*10+ch-'0';
    		ch=getchar();
    	}
    	x*=f;
    }
    
    #define MAXN 10007
    
    int arr[MAXN];
    int v;
    
    
    int main() {
    	#ifdef sahdsg
    	freopen("in.txt", "r", stdin);
    	#endif
    	int t;
    	while(~scanf("%d", &t) && t) {
    		REP(i,0,t) {
    			scanf("%d", &v);
    			arr[v-1]=i;
    		}
    		int cnt=0;
    		bool sorted=true;
    		REP(i,0,t-1) {
    			sorted=true;
    			REP(j,0,t-i-1) {
    				if(arr[j]>arr[j+1]) sorted = false;
    			}
    			if(sorted) break;
    			REP(j,0,t-i-1) {
    				if(arr[j]>arr[j+1]) {
    					putchar('1'); 
    					swap(arr[j],arr[j+1]);
    				}
    				putchar('2');cnt++;
    			}
    			REP(j,t-i-1,t) {
    				putchar('2');cnt++;
    			}
    		}
    		putchar('
    ');
    	}
    	
    	return 0;
    }
    
  • 相关阅读:
    11g 配置 dgmgrl 以及报错 DataGuard ORA-00313,
    java三种匿名的方式开启线程
    java 四种方式实现字符流文件的拷贝对比
    java中过滤查询文件
    通过Java实现斗地主
    java中Map的entrySet 和keySet的使用
    python3列表推导式和生成器。
    python的特殊方法总结
    python3 定义向量运算
    python3模拟扑克牌
  • 原文地址:https://www.cnblogs.com/sahdsg/p/10503709.html
Copyright © 2011-2022 走看看