要求写一个小程序完成JSON查询的功能。

查询dfs就好了。

存储JSON对象用图(树)就好,把\(<key[],type,val[]>\)作为节点,然后又是字符串处理了。

其实就是个简化版的201809-3元素选择器

虽然说80%的评测用例对象层数不超过2层,但是经测试,凉心出题人评测用例最多的层数是20层。

#include <bits/stdc++.h>
const int maxn = 100; using namespace std; struct tNode
{
char key[85];
int type; // 0 STRING 1 OBJECT
char val[85];
};
tNode node[maxn*10+5]; int to[maxn*10+5];
int nex[maxn*10+5];
int head[maxn*10+5], cnt = 0; void addedge(int a, int b)
{
to[cnt] = b; nex[cnt] = head[a];
head[a] = cnt++;
} char query[50][85];
int queCnt; bool dfs(int x, int y)
{
// printf("%s %s\n", node[x].key, query[y]);
if (strcmp(node[x].key, query[y]) == 0)
{
if (y == queCnt - 1)
{
if (node[x].type == 0)
printf("STRING %s\n", node[x].val);
else
printf("OBJECT\n");
return true;
}
else
{
for (int i = head[x]; i != -1; i = nex[i])
{
if (dfs(to[i], y + 1))
return true;
}
return false;
}
}
else
{
return false;
}
} int main()
{
int n, m;
scanf("%d%d", &n, &m);
getchar(); memset(head, -1, sizeof(head));
stack<int> sta;
int num = 0;
char key[85] = "", val[85] = "";
while (n--)
{
char str[85];
scanf("%[^\n]", str);
getchar();
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] == '{')
{
strcpy(node[num].key, key);
node[num].type = 1;
if (!sta.empty())
addedge(sta.top(), num);
sta.push(num++);
strcpy(key, "");
}
else if (str[i] == '"')
{
char temp[85], tempCnt = 0;
for (i = i + 1; str[i] != '"'; i++)
{
if (str[i] == '\\')
temp[tempCnt++] = str[++i];
else
temp[tempCnt++] = str[i];
}
temp[tempCnt] = '\0';
if (strcmp(key, "") == 0)
strcpy(key, temp);
else
{
strcpy(val, temp);
strcpy(node[num].key, key);
strcpy(node[num].val, val);
node[num].type = 0;
addedge(sta.top(), num++);
strcpy(key, "");
}
}
else if (str[i] == '}')
{
sta.pop();
}
}
} while (m--)
{
char str[85];
scanf("%s", str);
queCnt = 0;
strcpy(query[queCnt++], "");
for (int i = 0; ; i++)
{
int tmp = 0;
int j = i + 1;
for (; str[j] != '.' && str[j] != '\0'; j++);
for (; i < j; i++)
{
query[queCnt][tmp++] = str[i];
}
query[queCnt++][tmp] = '\0';
if (str[j] == '\0')
break;
}
if (!dfs(0, 0))
printf("NOTEXIST\n");
} return 0;
}

CCF-CSP题解 201709-3 JSON查询的更多相关文章

  1. CCF CSP 201709-3 JSON查询

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-3 JSON查询 问题描述 JSON (JavaScript Object Not ...

  2. CCF CSP 201612-3 权限查询

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201612-3 权限查询 问题描述 授权 (authorization) 是各类业务系统不可缺 ...

  3. CCF 201709-3 JSON查询

    CCF 201709-3 JSON查询 试题编号: 201709-3 试题名称: JSON查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 JSON (JavaScript ...

  4. CCF-CSP 201709-3 JSON查询 题解

    试题编号: 201709-3 试题名称: JSON查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 JSON (JavaScript Object Notation) 是一 ...

  5. CCF(JSON查询:40分):字符串+模拟

    JSON查询 201709-3 纯字符串模拟,考的就是耐心和细心.可惜这两样我都缺... #include<iostream> #include<cstdio> #includ ...

  6. CCF CSP 201403-2 窗口

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-2 窗口 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标 ...

  7. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  8. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  9. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

随机推荐

  1. vim的查找功能

    vim是一款强大的编辑器. 在vim下要查找字符串: 一,全匹配: 1,从上往下查找,比如“string” :   /string 2,从下往上查找,比如“string” : ?string 二,模糊 ...

  2. Java中的继承、封装、多态的理解

    Java中的继承.封装.多态 继承的理解: 1.继承是面向对象的三大特征之一,也是实现代码复用的重要手段.Java的继承具有单继承的特点,每个子类只有一个直接父类. 2.Java的继承通过extend ...

  3. python3基础之 字符串切片

    一.python3中,可迭代对象有:列表.元组.字典.字符串:常结合for循环使用:均可使用索引切片 实例: str = ' #str[start:stop:step] 遵循[左闭右开]规则 prin ...

  4. 2019-9-19:渗透测试,HTML基础学习,html绘制表格

    1,受理员业务统计表 效果图: 代码: <!DOCTYPE html><html><head> <title>表格1</title>< ...

  5. 新闻实时分析系统 Spark Streaming实时数据分析

    1.Spark Streaming功能介绍1)定义Spark Streaming is an extension of the core Spark API that enables scalable ...

  6. Liunx 安装配置zsh和oh-my-zsh 替换 bash

    一.前言 本文将基于 Liunx 环境安装配置zsh 和 oh-my-zsh 替换 bash oh my zsh Liunx默认shell是单调的bash,而zsh比较高大上,bash有的功能,zsh ...

  7. 5. 彤哥说netty系列之Java NIO核心组件之Channel

    你好,我是彤哥,本篇是netty系列的第五篇. 简介 上一章我们一起学习了如何使用Java原生NIO实现群聊系统,这章我们一起来看看Java NIO的核心组件之一--Channel. 思维转变 首先, ...

  8. 品优购详情页---产品细节模块product_detail

    结构搭建 整个大盒子产品细节模块命名为: product_detail(不给高度,注意清除浮动带来的影响) 1号盒子命名为:aside(左侧浮动,有宽带不给高度) 2号盒子命名为:detail(右侧浮 ...

  9. kubeadm 报错 error execution phase preflight: couldn’t validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s

    原因:master节点的token过期了 解决:重新生成新token 在master重新生成token # kubeadm token create 424mp7.nkxx07p940mkl2nd # ...

  10. django初始化

    Django 版本 安装 pip安装 pip install django 安装最新版本的 pip install django==1.11.11 安装指定版本的 验证安装 直接去代码中调用djang ...