鱼C论坛

 找回密码
 立即注册
查看: 1594|回复: 2

[已解决]哞哞哞~

[复制链接]
发表于 2022-7-11 21:55:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题解看不懂 , 这道题好像要用 倍增 算法 , 求解释思路(或者不按题解也可) , 谢谢 ~
#include<stdio.h>
bool f=0;
int main(){
    int n;
    scanf("%d",&n);
    while(!f){
        int l=0,p=0;
        while(p*2+l+3<=n)p=p*2+l+3,l++;
        if(n>l+3+p)n-=(p+l+3);
        else{
            if(n-p==1)puts("m");
            else puts("o");
            f=1;
        }
    }
    return 0;
}

输入输出 :
11
m
谢谢回答
最佳答案
2022-7-12 00:01:52
本帖最后由 风车呼呼呼 于 2022-7-12 00:36 编辑

p*2+l+3<=n  看出 p*2+l+3 是计算字符串总长度
得出 p的含义:首尾那对字符串的长度

剩下 l+3,3是一个初始值,由每一轮比较都进行 l+1 操作,猜测 l 与 S[k] 中的 k 相等
去掉首尾,单独观察 S[k] 的中间部分,S[2]: moooo  S[1]: mooo , S[k+1] 比 S[k] 中间部分字符串相差 1 个字符
若将中间部分长度减去初始值 3 ,那剩余的字符数就是 k值,即 l 的值。(中间部分 字符数 = m +(k+2)个o,即字符数=k+3)
至此,符号含义已解出。


通过while的迭代,将 S[k] 扩大到能够包含到第 n 个字符为止。
设 S[k] 首尾相同的那对字符串为 Q
S[k] 的结构可写为 (Q)moo...oo(Q)
if(n>l+3+p)n-=(p+l+3)
判断 n 是否取在尾部Q的范围内,若为是,则可以直接减去前面的 Q+moo...oo 部分
因为 S[k] 的尾部Q,即与 S[k-1] 完全相同,完全可以在 S[k-1] 中找到答案。故重新迭代,找到 S[k-1] 进行判断。

若 n 并不在尾部Q位置取得,那么必定处在中间部分moo...oo处。(因为若处在首部Q内,之前的while循环中,只迭代到 S[k-1] 就能满足条件,到不了 S[k] 所必要的长度)
将 n 减去 首部Q 的长度,若为1,则是字符m,否则要处在中间部分,又不是首字母,那必定为字符o。
(S[0]可理解为 Q 是空字符串 ,中间部分为 moo)
屏幕截图 2022-07-11 215402.png
屏幕截图 2022-07-11 215415.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-12 00:01:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风车呼呼呼 于 2022-7-12 00:36 编辑

p*2+l+3<=n  看出 p*2+l+3 是计算字符串总长度
得出 p的含义:首尾那对字符串的长度

剩下 l+3,3是一个初始值,由每一轮比较都进行 l+1 操作,猜测 l 与 S[k] 中的 k 相等
去掉首尾,单独观察 S[k] 的中间部分,S[2]: moooo  S[1]: mooo , S[k+1] 比 S[k] 中间部分字符串相差 1 个字符
若将中间部分长度减去初始值 3 ,那剩余的字符数就是 k值,即 l 的值。(中间部分 字符数 = m +(k+2)个o,即字符数=k+3)
至此,符号含义已解出。


通过while的迭代,将 S[k] 扩大到能够包含到第 n 个字符为止。
设 S[k] 首尾相同的那对字符串为 Q
S[k] 的结构可写为 (Q)moo...oo(Q)
if(n>l+3+p)n-=(p+l+3)
判断 n 是否取在尾部Q的范围内,若为是,则可以直接减去前面的 Q+moo...oo 部分
因为 S[k] 的尾部Q,即与 S[k-1] 完全相同,完全可以在 S[k-1] 中找到答案。故重新迭代,找到 S[k-1] 进行判断。

若 n 并不在尾部Q位置取得,那么必定处在中间部分moo...oo处。(因为若处在首部Q内,之前的while循环中,只迭代到 S[k-1] 就能满足条件,到不了 S[k] 所必要的长度)
将 n 减去 首部Q 的长度,若为1,则是字符m,否则要处在中间部分,又不是首字母,那必定为字符o。
(S[0]可理解为 Q 是空字符串 ,中间部分为 moo)

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
柿子饼同学 + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2022-7-12 09:54:29 | 显示全部楼层

懂了 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 08:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表