首页 > 其他分享 >CSP历年复赛题-P1087 [NOIP2004 普及组] FBI 树

CSP历年复赛题-P1087 [NOIP2004 普及组] FBI 树

时间:2024-05-23 11:07:02浏览次数:27  
标签:NOIP2004 string int sum dfs P1087 str print FBI

原题链接:https://www.luogu.com.cn/problem/P1087

题意解读:字符串作为根,左边一半作为左子树,右边一半作为右子树,递归构造数,并按FBI规则输出后续遍历结果。

解题思路:

按照题意,通过dfs来构造树,对于字符串str,提取左边一半递归构造左子树,提取右边一半递归构造右子树,前提是字符串长度>1

输出根的位置在左、右子树dfs之后,即为后续遍历。

根据字符串的提取方法,有两种程序实现,一种是对string进行处理,一种是直接通过下标来变换,下面给出两种代码:

string str1 = "123456";

string str2(str1, 0, 3); //str2 = "123",表示从第0个开始3个字符

string str3(str1, 3); //str3 = "456",表示从第3个开始直到最后所有字符

100分代码-string处理:

#include <bits/stdc++.h>
using namespace std;

void print(string str)
{
    int sum = 0;
    for(int i = 0; i < str.size(); i++) sum += str[i] - '0';
    if(sum == 0) cout << "B";
    else if(sum == str.size()) cout << "I";
    else cout << "F";
}

void dfs(string str)
{
    if(str.size() > 1)
    {
        string left(str, 0, str.size() / 2);
        string right(str, str.size() / 2);
        dfs(left);
        dfs(right);
    }
    print(str);
}

int main()
{
    int n;
    string s;
    cin >> n >> s;
    dfs(s);
    return 0;
}

100分代码-下标变换:

#include <bits/stdc++.h>
using namespace std;

int n;
string s;

void print(int l, int r)
{
    int sum = 0;
    for(int i = l; i <= r; i++) sum += s[i] - '0';
    if(sum == 0) cout << "B";
    else if(sum == r - l + 1) cout << "I";
    else cout << "F";
}

void dfs(int l, int r)
{
    if(r - l + 1 > 1)
    {
        dfs(l, l + (r - l + 1) / 2 - 1);
        dfs(l + (r - l + 1) / 2, r);
    }
    print(l, r);
}

int main()
{
    cin >> n >> s;
    dfs(0, s.size() - 1);
    return 0;
}

 

标签:NOIP2004,string,int,sum,dfs,P1087,str,print,FBI
From: https://www.cnblogs.com/jcwy/p/18207947

相关文章

  • CSP历年复赛题-P1085 [NOIP2004 普及组] 不高兴的津津
    原题链接:https://www.luogu.com.cn/problem/P1085题意解读:找到两数之和大于8且两数之和最大值的位置解题思路:不多说,送分题,直接模拟法即可100分代码:#include<bits/stdc++.h>usingnamespacestd;inta,b;intmaxx,maxn;intmain(){for(inti=1;i<=7;i++)......
  • 洛谷题单指南-动态规划2-P1091 [NOIP2004 提高组] 合唱队形
    原题链接:https://www.luogu.com.cn/problem/P1091题意解读:要挑选一个最长的先上升后下降的序列,求其余的元素数量解题思路:先计算正向的最长上升子序列,设f[i]表示以i结尾的正向最长上升子序列再计算逆向的最长上升子序列,设g[i]表示以i结尾的逆向最长上升子序列再枚举所有的i<j,m......
  • Apache OFBiz 身份验证绕过漏洞 (CVE-2023-51467)
    ApacheOFBizAuthenticationBypassVulnerability(CVE-2023-51467)ApacheOFBizAuthenticationBypassVulnerability(CVE-2023-51467)PublishedbyDikshaOjhaonDecember27,2023SonicWall威胁研究团队在基于Java的Web框架ApacheOFBiz中发现了身份验证绕......
  • 洛谷题单指南-贪心-P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
    原题链接:https://www.luogu.com.cn/problem/P1090题意解读:两两合并,是典型的哈夫曼编码算法思想,贪心即可。解题思路:要是合并体力消耗最少,就要让尽可能少的果子越晚合并越好,因此,贪心策略为优先选择数量最少的两堆果子合并,一直到剩下一堆果子,把合并过程中的消耗值累加即可,要快速......
  • P1088 [NOIP2004 普及组] 火星人
    [NOIP2004普及组]火星人题目描述人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小......
  • Apache Ofbiz CVE-2023-51467 漏洞分析
    ApacheOfbizCVE-2023-51467漏洞分析漏洞影响范围ApacheOFBiz<18.12.10环境搭建启动docker环境vulhub-master/ofbiz/CVE-2023-51467克隆仓库,转到指定commit,用idea进行远程调试gitclonehttps://github.com/apache/ofbiz-framework.gitcdofbiz-frameworkgitche......
  • Apache Ofbiz CVE-2020-9496
    ofbiz官网:https://ofbiz.apache.org/比较好的参考文章:https://blog.csdn.net/weixin_45728976/article/details/108872281影响版本ApacheOfbiz:<17.12.04漏洞原理:访问未授权的XML-RPC接口,构造XML-RPC协议请求格式,利用XML-RPC协议进行反序列化XML-RPC介绍:XML-RPC(XMLRemot......
  • Apache Ofbiz CVE-2021-26295分析
    漏洞影响版本:apache:ofbiz<17.12.06补丁代码:https://github.com/apache/ofbiz-framework/commit/af9ed4e/漏洞触发路径:https://ip:8443/webtools/control/SOAPService漏洞复现环境搭建:dockerpullandyjunghans/ofbizdockerrun-p8080:8080-p8443:8443andyjunghans/of......
  • 洛谷题单指南-暴力枚举-P1088 [NOIP2004 普及组] 火星人
    原题链接:https://www.luogu.com.cn/problem/P1088题意解读:火星人的手指可以通过全排列来表示数字,全排列由小到大的顺序即为表示的数字大小,题目可以转化为:给定按顺序全排列中的某一个排列,求往后数m个排列的内容。解题思路:此题与经典全排列问题的差异在于,需要从指定一个排列开......
  • OFBiz RCE漏洞复现(CVE-2023-51467)
    漏洞名称ApacheOFBiz鉴权绕过导致命令执行漏洞描述ApacheOFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。OFBiz最主要......