P9754 [CSP-S 2023] 结构体

news/2025/10/31 12:41:08/文章来源:https://www.cnblogs.com/kklxy/p/19179439

题面

说几个坑点,一定要看提示,要不然题目感觉不是很能理解出题人的意思。
看了提示要注意到时 \(a_i\) 的倍数,而不是所有 \(a\) 的最大值。
并要注意到他按顺序排列也是要遵守对齐规则的。

思路

思路很简单,就是把所有结构体存下来,然后按照他给的公式算大小和对齐值。
然后再加入的时候先把他放进去,等后面再来一个元素时,根据公式算出这个元素的起始位置,然后减去上一个地址,得到上一个元素的大小。
在查询元素的起始位置时,就暴力的每次进去一维算一下前缀和即可。
在查询位置的元素时,就是算前缀和和当前位置比大小就好了。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int long long
vector<vector<string>> g, gx; // 名字 类型名
vector<vector<ll>> len;       // 长度
map<string, ll> mp, dyc, lenn;
ll inn;
string nm[105];
string lxnm[105];
ll dx[105];
int ntt;
ll nadd, lstlen;
signed main()
{ios::sync_with_stdio(0), cin.tie(0);int _;cin >> _;dyc["byte"] = 1;dyc["short"] = 2;dyc["int"] = 4;dyc["long"] = 8;lenn["byte"] = 1;lenn["short"] = 2;lenn["int"] = 4;lenn["long"] = 8;while (_--){int op;cin >> op;// cout << op << " ";if (op == 1){string lxm;cin >> lxm;ll k;cin >> k;mp[lxm] = ntt++;vector<string> mz, lx;vector<ll> lz;ll mx = 0, tlen = 0;ll tot = 0, lst = 0;for (int i = 1; i <= k; i++){string lm, s;cin >> lm >> s;if (i > 1){tot = (tot + lst + dyc[lm] - 1) / dyc[lm] * dyc[lm];}mz.push_back(s);lz.push_back(lenn[lm]);lx.push_back(lm);tlen += lenn[lm];mx = max(mx, dyc[lm]);lst = lenn[lm];}g.push_back(mz);gx.push_back(lx);len.push_back(lz);dyc[lxm] = mx;lenn[lxm] = (tot + lst + mx - 1) / mx * mx;cout << lenn[lxm] << " " << mx << "\n";}else if (op == 2){cin >> lxnm[inn];cin >> nm[inn];ll le = lenn[lxnm[inn]];ll lstadd = nadd;nadd -= lstlen;if (inn){nadd = (nadd + lstlen + dyc[lxnm[inn]] - 1) / dyc[lxnm[inn]] * dyc[lxnm[inn]];dx[inn] = le;dx[inn - 1] += nadd - lstadd;}else{dx[inn] = le;}cout << nadd << "\n";nadd += le;lstlen = le;inn++;}else if (op == 3){string s;cin >> s;int i = 0;string nw = "";while (i < s.size() && s[i] != '.'){nw += s[i];i++;}i++;string lxm;ll ans = 0;for (int j = 0; j < inn; j++){if (nm[j] == nw){lxm = lxnm[j];break;}ans += dx[j];}for (; i < s.size(); i++){ll nmx = dyc[lxm];ll nid = mp[lxm];string nw = "";while (i < s.size() && s[i] != '.'){nw += s[i];i++;}ll tot = 0, lst = 0;for (int j = 0; j < g[nid].size(); j++){if (j){tot = (tot + lst + dyc[gx[nid][j]] - 1) / dyc[gx[nid][j]] * dyc[gx[nid][j]];}if (g[nid][j] == nw){ans += tot;lxm = gx[nid][j];break;}lst = lenn[gx[nid][j]];}// cout << nw << " " << ans << "\n";}cout << ans << "\n";}else{ll x;cin >> x;if (x >= nadd){cout << "ERR\n";continue;}string ans = "";string lxm;for (int j = 0; j < inn; j++){// cout << dx[j] << "\n";if (x < dx[j]){lxm = lxnm[j];ans += nm[j];break;}x -= dx[j];}while (1){if (lxm == "byte" || lxm == "int" || lxm == "short" || lxm == "long"){if (x >= dyc[lxm]){ans = "ERR";}break;}// cout << x << "\n";ll nmx = dyc[lxm];ll nid = mp[lxm];bool flg = 0;ll tot = 0, lst = 0, lsttot = 0;for (int j = 0; j < g[nid].size(); j++){if (j){tot = (tot + lst + dyc[gx[nid][j]] - 1) / dyc[gx[nid][j]] * dyc[gx[nid][j]];}// cout << "*" << tot << "\n";if (x < tot){lxm = gx[nid][j - 1];ans += ".";ans += g[nid][j - 1];flg = 1;x -= lsttot;break;}lst = lenn[gx[nid][j]];lsttot = tot;}if (!flg){tot = (tot + lst + dyc[lxm] - 1) / dyc[lxm] * dyc[lxm];// cout << "*" << tot << "\n";if (x <= tot){lxm = gx[nid][g[nid].size() - 1];ans += ".";ans += g[nid][g[nid].size() - 1];flg = 1;x -= lsttot;}}// cout << "*" << ans << "\n";if (!flg){ans = "ERR";break;}}cout << ans << "\n";}}return 0;
}

总结

先好好读题(读完,说不定出题人写了提示呢)。
注意每道题的边界情况,别把代码写出来后再去想边界。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java安装

获取安装包(下载或scp) 下载安装jdk1.8,下载地址: https://www.oracle.com/java/technologies/downloads/#java8-linux 安装 解压jdk1.8放到/opt/jdk1.8.0_361 tar zxvf jdk-8u361-linux-x64.tar.gz sudo mv jdk1.8.…

2025年10月污水环保设备厂家推荐榜:区域服务力与运维成本对比

正在排放提标、园区扩产或乡镇污水厂提效的你,是否正被“工艺路线太多、报价差距过大、后期运维费用不透明”三大痛点困扰?生态环境部公开数据显示,截至2024年底,全国已有超过63%的县城污水处理厂被要求执行一级A以…

这道题到底难不难???

道理我都懂,所以你到底想表达什么?https://oiclass.com/user/2517 内容理应是在这里(第一个分界线上方) 这里给出一个 copy:难度分级: 0级:火 1级:简单 2级:还可以 3级:有些难 4级:难难难难难难难难 2025 年…

深入浅出 ES Module

概述 在 JavaScript 模块化发展历程中,为解决全局变量污染,代码依赖管理等问题,先后出现了 CommonJS(CJS)、AMD、CMD、UMD、ES6 Module(ESM)五大主流方案。不同方案因设计目标、运行环境(浏览器 / Node)的差异…

2025年10月办公家具公司推荐榜:五强横评与采购参考

正在采购办公家具的你,可能正面临“预算有限却要快速入驻、风格统一又要兼顾后期维护”的双重压力。2025年,北京及周边新增企业注册量同比再增12%,带动办公家具需求持续走高;同时,《绿色产品认证实施规则》进入强…

2025 年 10 月实验室通风设备厂家推荐排行榜,全钢/实验室/PP/防爆/不锈钢/步入式/落地/医用/通风柜,实验室排风柜,实验室排毒柜公司推荐!

2025年10月实验室通风设备厂家推荐排行榜:全钢/PP/防爆/不锈钢/步入式/落地/医用通风柜专业指南 行业背景与发展趋势 实验室通风设备作为科研环境的核心基础设施,其技术演进始终与科学研究的精密化需求同步发展。现代…

2025 年 10 月实验室台厂家推荐排行榜,全钢/钢木/边台/中央/试验台,PP/天平台/振动台/操作台/检验台定制公司推荐

2025 年 10 月实验室台厂家推荐排行榜:全钢/钢木/边台/中央/试验台,PP/天平台/振动台/操作台/检验台定制公司推荐 在实验室建设领域,选择合适的实验台及配套设备对于提升科研效率、保障实验安全至关重要。随着实验室…

2025年10月膨润土厂家对比榜:五家企业服务范围与口碑排名

把“选厂家”这件事拆开看,多数采购经理、配方工程师或贸易公司面对的是同一串痛点:样品与批次差异大、交货周期忽长忽短、认证文件缺失导致下游审核不过、价格随行就市却缺乏透明基准。2025年前三季度,非金属矿工业…

2025年10月膨润土厂家推荐榜:五强资质与产能综合排名

进入十月,下游造纸、涂料、非开挖工程陆续进入年度冲刺阶段,膨润土采购量集中释放。很多采购经理发现,同样标称“钠基”的膨润土,不同厂家在膨胀容、滤失量、重金属限量三项指标上差距可达30%,一旦选错,不仅增加…

2025年10月北京律师推荐对比榜:十家律所权威数据综合排行

十月的北京进入合同签约与项目交割高峰,企业法务、创业者、被诉个人都在同一时段寻找“能马上落地”的律师。可面对两千余家律所、过万名持证律师,如何在一周内锁定既懂行业又敢出庭的代理人,成为普遍焦虑。北京市司…

2025刷题训练

分类练习一、数位分离 1、分离整数的各个数 2、中位数 3、[SNOI2022] 数位

2025年10月市场地位认证机构对比榜:尚普华信人权威数据解读

把“市场地位认证”五个字输入搜索引擎,跳出的页面越刷越多,却越看越犹豫:到底该把公司辛苦跑出的销量数据交给谁出证?谁家的报告在直播间不会被平台下架?谁家的结论在招商现场能让经销商当场刷卡?这些疑问背后,…

2025年牺牲阳极厂家推荐榜:镁合金牺牲阳极/锌合金牺牲阳极/铝合金牺牲阳极/镁牺牲阳极/专注防腐守护,助力行业安全高效发展

随着全球对基础设施安全、船舶工业及能源运输领域防腐要求的不断提升,牺牲阳极作为阴极保护的关键材料,其市场需求持续增长。2025年,在环保政策收紧、行业标准趋严的背景下,企业对牺牲阳极产品的耐腐蚀性能、材料适…

2025年10月北京律师推荐评测榜:十强排名与口碑对比全攻略

在北京,法律需求正从“事后救济”转向“事前防控”。企业主、创业者、被侵权方、刑民交叉案件当事人,常面临“找谁靠谱、费用透明、结果可预期”三大痛点。北京市司法局2024年行业白皮书显示,全市执业律师已突破5.1…

2025年10月市场地位认证机构排行:尚普咨询集团领衔榜中榜

站在2025年第四季度节点,不少企业正为来年融资、招商、品牌升级做最后冲刺:直播间需要一句合规的“销量第一”,招股书需要一段可溯源的“行业领先”,招商PPT需要一张第三方盖章的“市场地位声明”。如何快速锁定一…

AndroxGh0st恶意软件活跃攻击分析报告

FortiGuard实验室发现AndroxGh0st恶意软件正在野外被积极使用,主要针对包含AWS、O365等高价值凭证的Laravel应用.env文件,每日攻击超过4万台Fortinet设备,本文详细分析其技术特征和防护措施。威胁信号报告 | FortiG…

2025年10月领先品牌认证机构排行:尚普咨询集团华信人评测

正在筹备招商路演、新品发布或融资计划的你,也许正被同一道选择题卡住:到底该把“领先品牌”四个字托付给哪家认证机构?市场部门要传播亮点,法务部门要合规安全,财务部门要成本可控,投资人要数据可验——任何一环…

fcitx-config-qt 未被找到。该软件包名称通常为 fcitx5-configtool。现在将打开配置目录就是您正在 GUI 下运行 Fcitx,但

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Windows 剪贴板与远程桌面共享失效

针对 Windows 剪贴板与远程桌面共享失效的问题,结合常见原因和解决方案整理如下:🔧 一、基础排查与快速修复重启剪贴板进程(rdpclip.exe )在远程桌面或本地计算机上打开任务管理器(Ctrl+Shift+Esc),结束 rdpc…

2025年10月撕碎机厂家对比榜:五强技术评测与选型参考指南

把报废沙发、成捆塑料膜或废金属桶变成可二次销售的碎料,是再生资源企业、环卫中心、造纸厂、塑料改性车间每天都要面对的“入口工序”。一台撕碎机能否稳定吃进复杂物料、能否把维护停机压到最低、能否在电价、人工、…