1861: 斗破苍穹 【最长回文子串】

<pre class="cpp" name="code">

斗破苍穹
 

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 196   Solved: 42

Submit Status Web Board

Description

有一天, 我们帅气的LC来到加玛帝国. 有时候, 缘分就是这么奇怪, LC和加玛帝国的公主一见钟情, 奈何公主的父王不同意, 因为他觉得LC除了长得特别帅之外, 并没有一技之长.

LC对此呵呵一笑, 他说, 我可是创新实验室走出来的学生, 我会的技能可多着呢, 先说个简单的吧, 只要你给我任意一串字符串, 我就能立马算出这串字符串当中最长回文串的长度. 国王很是吃惊, 说要考一考LC.

于是国王想让你帮忙写一个程序, 用来比对LC的答案, 快来帮帮国王吧!

Input

第一行输入一个T(T <= 50), 表示一共有T组测试数据. 接下来T行, 每行为一组由小写字母组成, 长度不超过10^5的字符串.

Output

每行一个整数X, 表示该组字符串中所包含的最长回文长度.

Sample Input

3aba
abc
aabaa

Sample Output

3
1
5
分析:
最长回文子串模板题,用Manacher算法。时间为O(n)
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<stack>
#include<map>
using namespace std;
const int N=200100;
int n,p[N];
char s[N],str[N];

void kp()
{
    int i;
    int mx=0;
    int id;
    memset(p,0,sizeof(p));
    for(i=n;str[i]!=0;i++)
        str[i]=0;
    for(i=1;i<n;i++)
    {
        if(mx>i)
            p[i]=min(p[2*id-i],p[id]+id-i);
        else p[i]=1;
        for(;str[i+p[i]]==str[i-p[i]];p[i]++)
            if(p[i]+i>mx)
        {
            mx=p[i]+i;
            id=i;
        }
    }
}

void init()
{
    int i,j,k;
    str[0]='$';
    str[1]='#';
    for(i=0;i<n;i++)
    {
        str[i*2+2]=s[i];
        str[i*2+3]='#';
    }
    n=n*2+2;
    s[n]=0;
}

int main()
{
    int i,ans;
     int t;
     cin>>t;
     while(t--)
    {
        cin>>s;
        n=strlen(s);
        init();
        kp();
        ans=0;
        for(i=0;i<n;i++)
            if(p[i]>ans)
            ans=p[i];
        cout<<ans-1<<endl;
    }
    return 0;
}


<think>好的,用户想寻找用C++开发《苍穹》游戏的教程和资源。首先,我需要确认《苍穹》是否确实有官方的游戏或者相关开源项目,因为如果存在官方资源的话,直接推荐官方文档会更有帮助。不过根据我的知识库,目前没有《苍穹》的官方C++游戏开发资料,可能用户是想基于这部小说开发同人游戏。 接下来,用户的需求可能分为几个部分:C++游戏开发的基础知识、图形引擎的使用、网络编程、以及如何结合《苍穹》的IP进行开发。需要分别考虑每个部分的相关资源。 首先,C++游戏开发的基础教程是必须的,比如书籍《C++ Primer》和《Effective C++》可以巩固基础。然后,游戏引擎方面,Unreal Engine和Cocos2d-x都是使用C++的热门引擎,尤其是Unreal Engine在3D游戏开发方面表现突出,可能更适合《苍穹》这类3D玄幻题材。需要推荐相关的教程和文档,比如Unreal的官方文档和社区教程。 其次,图形API如OpenGL和DirectX的学习资源也是必要的,特别是如果用户需要自定义引擎的话。推荐一些经典的书籍和在线教程,比如《OpenGL编程指南》和LearnOpenGL网站。 网络部分,如果游戏需要多人在线功能,就得考虑网络编程,Boost.Asio和UE4的内置网络模块可能适用,需要提供相关链接和参考资料。 然后,关于《苍穹》的特定资源,可能需要用户自行设计角色和场景,或者寻找已有的素材库。提醒用户注意版权问题,避免侵权。可以建议使用3D模型网站如TurboSquid或Blender社区的资源,或者使用Daz3D进行角色创建。 此外,开源项目和社区资源也很重要,GitHub和GitCode上可能有相关的游戏项目可以参考,参与游戏开发论坛如GameDev.net和知乎的相关话题也能获得帮助。 最后,需要提醒用户,如果使用小说中的元素,必须获得相关授权,避免法律问题。同时,建议分阶段开发,从基础开始逐步构建游戏功能,比如先实现战系统,再处理剧情和多人交互。 总结下来,需要组织这些资源,分门别类地呈现给用户,确保信息清晰且相关,同时注意用户可能需要的实践步骤和注意事项。</think>### C++开发《苍穹》游戏的相关资源与建议 #### 1. 基础开发工具与框架 - **游戏引擎选择**: - **Unreal Engine**:适合开发3D玄幻题材游戏,提供完整的C++开发支持,内置物理引擎、动画系统和粒子特效。官方文档中包含角色控制、场景构建等教程[^1]。 - 官方学习路径:[Unreal Engine 学习](https://www.unrealengine.com/zh-CN/learn) - **Cocos2d-x**:适合2D或轻量级3D游戏开发,社区提供丰富的案例和插件支持。 - **图形编程库**: - **OpenGL**:用于自定义渲染管线,推荐教程《OpenGL编程指南》和在线学习平台[LearnOpenGL](https://learnopengl.com/)。 - **DirectX 12**:适用于高性能Windows平台游戏开发,微软官方提供API文档和示例[^2]。 #### 2. 核心功能实现参考 - **角色与技能系统**: - 使用**状态机模式**实现角色动作切换(如攻击、防御、释放技能)。 - 参考开源项目《Godot RPG Framework》的战逻辑设计,通过C++重写相关模块。 - **场景与剧情系统**: - 使用**JSON或XML**定义剧情节点,结合C++脚本引擎(如Lua绑定)实现动态对话和任务触发。 - 地形生成可参考《Procedural Content Generation in Games》中的算法实现。 #### 3. 学习资源推荐 - **书籍与课程**: - 《Game Programming Patterns》:讲解游戏开发常用设计模式(如组件化、对象池)。 - Unreal官方课程《C++ Programming for Game Developers》涵盖从基础到网络同步的全流程。 - **开源项目参考**: - GitHub项目《OpenMMORPG》(C++实现的多人在线框架)[^3] - GitCode项目《FantasyEngine》(玄幻题材渲染引擎原型) #### 4. 美术资源获取 - **3D模型与材质**: - **TurboSquid** 或 **Sketchfab** 搜索"Chinese Fantasy"相关模型(注意商业授权)。 - Blender社区提供的免费低多边形角色模板。 - **特效与音效**: - Unreal Marketplace的"Magic Effects Pack"包含适合气化翼、异火等特效资源。 #### 5. 注意事项 - **版权合规**:若直接使用《苍穹》原著名称、角色设定,需获得阅文集团官方授权。 - **性能优化**:对于大型开放世界,需实现LOD(细节层次)和空间分割算法(如四叉树)。 ```cpp // 示例:简单的技能释放逻辑(Unreal C++) void ACharacter::CastSkill(int32 SkillID) { if (SkillMap.Contains(SkillID)) { FSkillData Skill = SkillMap[SkillID]; if (Mana >= Skill.Cost) { PlayAnimation(Skill.AnimSequence); SpawnParticleEffect(Skill.VFX); ApplyDamage(Skill.Power); Mana -= Skill.Cost; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值