XDOJ1109 - 破解密码

Description

SHF是一个很神奇的人,他的电脑也采用了一种奇怪的密码验证方式,即一串数字的某个排列。CX是一个密码破解爱好者,当然对于这种密码很有兴趣。现在他知道SHF的初始密码是(1,2,3,...,N),每次用两个数字A和B来修改密码,也就是把[A,B]位置区间的数字反序,包括A、B位置的数字(A,B以1作为起始编号)。例如,现在的密码是(2,1,3,5,4),密码修改操作的数字是2和5,则修改后的密码为(2,4,5,3,1)。CX已经知道了SHF所有的密码修改操作的序列,但由于操作次数实在太多了,他计算不出最后的密码是什么,现在他需要你帮他计算出最后的密码。

Input

输入数据的第一行是一个正整数T(0 每组测试数据的第一行包含两个整数N,M(0 接下来有M行,每行有两个整数A,B(0

Output

对于每组测试数据,在一行上输出N个整数,表示最后的密码。整数之间以一个空格隔开。

Sample Input

2
5 2
1 3
4 5
5 2
1 4
2 5

Sample Output

3 2 1 5 4
4 5 1 2 3

解题思路:

需要注意的其实vector.end()指向的最后一个元素的下一个位置。

#include
#include
#include
using namespace std;
vector passwd;
void print()
{
    vector::iterator iter = passwd.begin();
    cout<<*iter;
    for(++iter;iter!=passwd.end();++iter)
        cout<<" "<<*iter;
    cout<>T;
    for(int i=0;i>N>>M;
        passwd.clear();
        for(int j=1;j<=N;++j)
            passwd.push_back(j);
        for(int j=0;j>A>>B;
            reverse(passwd.begin()+A-1,passwd.begin()+B);
        }
        print();
    }
    return 0;
}

 

最后欢迎大家访问我的个人网站: 1024s

你可能感兴趣的:(ACM)