| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:一次AC,贴代码In Reply To:一次AC,贴代码 Posted by:KatrineYang at 2016-05-28 11:00:39 > //============================================================================
> // Name : main1026.cpp
> // Author :
> // Version :
> // Copyright : Your copyright notice
> // Description : Hello World in C++, Ansi-style
> //============================================================================
>
> #include <iostream>
> #include <string>
> using namespace std;
>
>
> class node{
> public:
> int num;
> node* next;//置换中下一个位置
> node* rep;//代表的元素
> int cirlen;
> };
>
> int main() {
> //cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
> while(1){
> int len;
> cin >> len;
> if(len <= 0) return 0;
> node* zh = new node[len + 1];
> for(int i = 1; i <= len; i++){
> cin >> zh[i].num;
> }
>
> //下面开始求置换
> for(int i = 1; i <= len; i++){
> zh[i].next = NULL;
> }
> for(int i = 1; i <= len; i++){
> if(zh[i].next != NULL) continue;//已经计算了置换
> zh[i].rep = zh + i;
> node* iter = zh + zh[i].num;
> int cL = 1;
> zh[i].next = iter;
> while(iter != zh + i){
> iter->rep = zh + i;
> iter->next = zh + iter->num;
> iter = iter->next;
> cL++;
> }
> zh[i].cirlen = cL;
> }
>
> //cout << "ehe" << endl;
> while(1){
> int ci;
> cin >> ci;
> if(ci <= 0) break;
> string s;
> getline(cin, s);
> //cout << s << endl;
> s = s.substr(1);
> //cout << s << endl;
> char* chars = new char[len + 1];
> char* resChars = new char[len + 1];
> int slen = s.length();
> for(int i = 0; i < slen; i++){
> chars[i+1] = s[i];
> }
> for(int i = slen; i < len; i++){
> chars[i+1] = ' ';
> }
> //cout << "1" << endl;
> for(int i = 1; i <= len; i++){
> node* idx = zh + i;
> int py = ci % zh[i].rep->cirlen;
> for(int j = 0; j < py; j++){
> idx = idx->next;
> }
> //cout << zh << " " << idx << endl;
> resChars[idx - zh] = chars[i];
> }
> for(int i = 1; i <= len; i++){
> cout << resChars[i];
> }
> cout << endl;
> delete [] chars;
> delete [] resChars;
> }
>
>
> cout << endl;
> delete [] zh;
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator