zoukankan      html  css  js  c++  java
  • 【POJ】1026.Cipher

    题解

    置换群的快速幂,然而我姿势水平不高,样例过不去,然后才明白这个置换的意思是这个位置上的数代表要把原位置的某个数换过来
    需要新开一个数组存结果

    代码

    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <set>
    #include <cstring>
    #include <ctime>
    #include <map>
    #include <algorithm>
    #include <cmath>
    #define MAXN 100005
    #define eps 1e-8
    //#define ivorysi
    #define pii pair<int,int>
    #define mp make_pair
    #define fi first
    #define se second
    using namespace std;
    typedef long long int64;
    typedef double db;
    
    int N,a[MAXN],L,ans[MAXN],t[MAXN],K,tmp[MAXN];
    char str[MAXN],s[MAXN];
    void mul(int *c,int *d) {
    	for(int i = 1 ; i <= N ; ++i) tmp[i] = c[d[i]];
    	for(int i = 1 ; i <= N ; ++i) c[i] = tmp[i];
    }
    void fpow(int c) {
    	for(int i = 1 ; i <= N ; ++i) t[i] = a[i];
    	for(int i = 1 ; i <= N ; ++i) ans[i] = i;
    	while(c) {
    		if(c & 1) mul(ans,t);
    		mul(t,t);
    		c >>= 1;
    	}
    }
    int main() {
    #ifdef ivorysi
    	freopen("f1.in","r",stdin);
    #endif
    	while(scanf("%d",&N) != EOF && N) {
    		for(int i = 1 ; i <= N ; ++i) {
    			scanf("%d",&a[i]);
    		}
    		while(scanf("%d",&K) != EOF && K){
    			for(int i = 1 ; i <= N ; ++i) str[i] = ' ';
    			getchar();
    			gets(str + 1);
    			L = strlen(str + 1);
    			for(int i = 1 ; i <= N ; ++i) {
    				if(str[i] == 0) str[i] = ' ';
    			}
    			fpow(K);
    			for(int i = 1 ; i <= N ; ++i) {
    				s[ans[i]] = str[i];
    			}
    			for(int i = 1 ; i <= N ; ++i) putchar(s[i]);
    			putchar('
    ');
    		}
    		putchar('
    ');
    	}
    	return 0;
    }
    
  • 相关阅读:
    关于在调用JAVAFX相关包时遇到Access restriction: The type 'Application' is not API (restriction on required library)的解决方法
    JS 获取随机颜色值
    JS jQuery 点击页面漂浮出文字
    JQ 获取浏览器窗口宽高
    JQ 操作css
    JQ 遍历--(祖先,后代,同胞,过滤)
    JQ DOM元素 创建 添加 删除
    jQuery 效果
    3
    webpack 打包CSS 引入图片
  • 原文地址:https://www.cnblogs.com/ivorysi/p/9042675.html
Copyright © 2011-2022 走看看