题解 P6354 【[COCI2007-2008#3] TAJNA】

· · 题解

这是本蒟蒻的第01篇题解。

管理大大求过QAQ。

思路

其实这道题可以不写模拟

那么有人就要问了,不写模拟在原字符串上直接输出也可以,可是这个位置怎么办呢?没关系,现在我来教你怎么算位置。(为了方便,我们用数字表示)

1234→1324 123456→135246 123456789→147258369

发现什么了吗,如果没发现,那么下面我会给你更详细的解说。

1,2,3,4 → 1,1+2,2,2+2 1,2,3,4,5,6→1,1+2,1+2+2,2,2+2,2+2+2 1,2,3,4,5,6,7,8,9→1,1+3,1+3+3,2,2+3,2+3+3,3,3+3,3+3+3

是不是恍然大悟?

Code:

#include<bits/stdc++.h>//无敌头文件,你值得拥有
using namespace std;
string n;
bool k[101];//防止一些奇怪的错误,本蒟蒻也不知为何
int a=1,b=1,x,ks;//a,b是长方形的长和宽,x是n的位数,ks是指针
int main(){
    cin>>n;
    x=n.size();
    //求长和宽
    for(int i=1;i*i<=x;i++){
        if(x%i==0){
            a=i;
            b=x/i;
        }
    }
    //重点来了!
    for(int i=1;i<=a;i++){
        while(k[ks]){
            ks++;
        }
        //防止一些bug
        cout<<n[ks];
        k[ks]=1;
        for(int j=1;j<b;j++){
            cout<<n[ks+j*a];//这就是我前面讲了大半天的东东
            k[ks+j*a]=1;
        }
    }
    return 0;
    禁止抄袭!!!
}

管理大大求过啊……