题目大意:暗号
Bod 和 Alice 计划使用一种全新的编码方案,令人惊讶的是这不是一个公开的公匙密码,但是他们的编码基于密匙,在Philadelphia on February 16th他们的会议中选择了密匙,他们选择的密匙是一个两两不等的整数序列,a1.....an,大于0并且小于等于n,编码基于一下原则。下面的信息是关键,这样关键的人物信息和数字相对齐,一个字符在i位置,编码的时候把他放在ai,ai就是相应数字位置的关键,并且他们以同样的编码信息进行编码,这个过程重复k次,在k次以后他们交换彼此的编码。
这段信息的长度小于或者等于n,如果小于n,那么就在信息的后面能添加空格使它等于n,
写一个程序完成这个编码
发现因为没有重复的数字,所以有个内层的循环可以利用。试试吧->(也不知道k有多大,真坑)
发现一个最坑的地方,数字和后面的字符串只有一个空格隔开,多余的空格都是属于后面字符串的,真的是非常坑啊,只能用getchar过滤一个空格!!!!

#include<stdio.h>

#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 1005
struct node
{
    int num, k;
}a[maxn];
int Find(int x, int k, int e);
int GetIndex(int i, int k);
int main()
{
    int i, j, n;
    while(scanf("%d", &n), n)
    {
        for(i=1; i<=n; i++)
        {
            scanf("%d", &a[i].num);
            a[i].k = 0;
        }
        for(i=1; i<=n; i++)
        {
            if(!a[i].k)
                a[i].k = Find(i, 1, i);
        }
        int k;
        while(scanf("%d", &k), k!=0)
        {
            char s1[maxn]={0}, s2[maxn]={0};
            getchar();
            gets(s1+1);
            for(i=strlen(s1+1)+1; i<=n; i++)
                s1[i] = ' ';
            for(i=1; i<=n; i++)
            {
                j = GetIndex(i, k);
                s2[j] = s1[i];
            }
            for(i=n; s2[i]==' '; i--)
                s2[i] = 0;
            printf("%s\n", s2+1);
        }
        printf("\n");
    }
    return 0;
}
int Find(int x, int k, int e)
{
    if(a[x].num != e)
        return a[x].k = Find(a[x].num, k+1, e);
    return a[x].k = k;
}
int GetIndex(int i, int k)
{
    int n=k%a[i].k;
    while(n--)
        i = a[i].num;
    return i;
}

poj1026的更多相关文章

  1. POJ1026 Cipher(置换的幂运算)

    链接:http://poj.org/problem?id=1026 Cipher Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  2. poj1026 Cipher ——置换群

    link:http://poj.org/problem?id=1026 其实这道题目和poj2369这道题目一样. 都是基础的置换群题目.把那道题目理解了,这道题就没问题了. 不过我的方法貌似比较挫, ...

  3. poj1026 Cipher

    题目意思可概括为给定集合S = {1,..,n}的一个双射关系f, 求经过k次复合之后元素i对应的元素fk(i) (i∈S). 由于函数是双射,一个原像对应唯一一个像,同样一个像有唯一一个原像,考虑整 ...

  4. poj1026(置换找循环节)

    找到循环节,然后对应的变换 Cipher Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20377   Accepted:  ...

  5. poj分类 很好很有层次感。

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  6. 【转】POJ题目分类推荐 (很好很有层次感)

    OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...

  7. 【转】ACM训练计划

    [转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...

  8. POJ 题目分类(转载)

    Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...

  9. ACM训练计划建议(写给本校acmer,欢迎围观和指正)

    ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...

随机推荐

  1. SQL Server中的死锁

    简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相关观念有一个理解. 一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理 ...

  2. ZBar Installer

    ZBar Install.For windows:http://sourceforge.net/projects/zbar/files/zbar/0.10/zbar-0.10-setup.exe/do ...

  3. INSERT INTO SELECT FROM 这语句怎么用

    如果两表字段相同,则可以直接这样用. insert into table_a select * from table_b 如果两表字段不同,a表需要b中的某几个字段即可,则可以如下使用: insert ...

  4. os项目icon和default 等相关图标命名规则和大小设置

    最新的参考apple官网地址:https://developer.apple.com/library/ios/qa/qa1686/_index.html,网页下面有详细的使用方法(ios7以后的) 转 ...

  5. UIView下使用Animation控制动画

    转载自:http://blog.csdn.net/xunyn/article/details/8128031 动画效果是IOS界面重要的特色之一,其中CAAnimation是所有动画对象的抽象父类,作 ...

  6. Vijos1865 NOI2014 魔法森林 LCT维护生成树

    基本思路: 首先按照weightA升序排序,然后依次在图中加边,并维护起点到终点路径上weightB的最大值 如果加边过程中生成了环,则删除环中weightB最大的边 由于是无向图,点之间没有拓扑序, ...

  7. 利用C#的反射机制动态调用DLL类库

    最近由于业务要求,需要动态调用DLL类库,所以研究了一下,感觉还好也不太难,今天就把自己理解的写了一个小例子(已经通过VS2005跑通),供大家一起研究和探讨,有理解不当的地方还请高手们多多指正,谢谢 ...

  8. C# 跨线程访问控件

    this.BeginInvoke(new Action(() => { this.StatusProgressBar_ExecutingTaskStatus.Value = (int)value ...

  9. jQuery备忘录--私家版

    最近在看jQuery,总是看过了忘,不知道该怎么办?准备开启洗脑模式,日常念一念,紧箍咒加身. 1.jQuery方法第一步:ready=>加载html的骨架.而onload=>整个页面加载 ...

  10. MSSQL中datetime与unix时间戳互转

    //ms sql datetime 转unix时间戳 SELECT DATEDIFF(s, '19700101',GETDATE()) //ms sql unix时间戳 转datetime 涉及到时区 ...