1 条题解

  • 0
    @ 2025-8-24 22:19:59

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 追梦之鲸
    哼~

    搬运于2025-08-24 22:19:59,当前版本为作者最后更新于2020-12-27 09:26:52,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


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

    管理大大求过QAQ。

    思路

    其实这道题可以不写模拟

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

    123413241234→1324

    123456135246123456→135246

    123456789147258369123456789→147258369

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

    1,2,3,41,1+2,2,2+21,2,3,4 → 1,1+2,2,2+2

    1,2,3,4,5,61,1+2,1+2+2,2,2+2,2+2+21,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;
        禁止抄袭!!!
    }
    

    管理大大求过啊……

    • 1

    信息

    ID
    5393
    时间
    1000ms
    内存
    32MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者