| ||||||||||
| 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 | |||||||||
致所有莫名其妙WA掉的OIer您可能没读懂这个题的恶心输入输出方式。
这个题的输入数据包括多个“block”,t=0 时标志着一个block的结束,n=0时标志着这个这个题的数据的结束。
这个题的数据不存在 s 中包括换行。
另外发一发自己的400ms快速幂做法
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
struct Group{
int x[250];
};
int n;
Group mul(Group a,Group b){
for(int i=1;i<=n;i++){
a.x[i]=b.x[a.x[i]];
}
return a;
}
Group pow(Group a,int x){
if(x==1){
return a;
}
if(x%2==0){
Group temp=pow(a,x/2);
return mul(temp,temp);
}else{
return mul(a,pow(a,x-1));
}
}
Group gr;
char resu[1000];
int solve(){
cin>>n;
if(n==0){
return 0;
}
for(int i=1;i<=n;i++){
cin>>gr.x[i];
}
int t;
string s;
while(1){
cin>>t;
getline(cin,s);
if(t==0){
cout<<endl;
return 1;
}
Group res=pow(gr,t);
for(int i=1;i<=n;i++){
if(i<s.length())
resu[res.x[i]]=s[i];
else resu[res.x[i]]=' ';
}
for(int i=1;i<=n;i++)
cout<<resu[i];
cout<<endl;
}
}
int main(){
while(solve());
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator