【美团杯2020】114514 解题报告
原题地址:http://uoj.ac/contest/53/problem/529
这题说实话我觉得有点玄学。我的方法是从左到右贪心,优先给每个4分配两个1,1不够的时候就再取出来。虽然我也意识到思路有问题,但是一直找不到反例,所以无从下手,最后死磕这道题也没搞出来。这里给出我的错误代码:
#include<cstdio>
#include<iostream>
using namespace std;int t,cnt;char a[600006];int s[600006][7];int que[600006];
int main()
{scanf("%d\n",&t);while (t --){cnt = 0;string t;getline(cin,t);for (int i = 0;i < t.size();i ++)if (t[i] == '1' || t[i] == '4' || t[i] == '5')a[++cnt] = t[i];int tot = 0;int tot2 = 0;int tot3 = 0;int tot4 = 0;int tot5 = 0;int tot6 = 0;int head = 1;int tail = 0;for (int i = 1;i <= cnt;i ++)if (a[i] == '1')que[++tail] = i;else if (a[i] == '4'){if (tail - head + 1 >= 2 && tot3 < cnt / 6){s[++tot][1] = que[head++];s[++tot2][2] = que[head++];s[++tot3][3] = i;}else{if (head > tail){s[++tot6][6] = i;s[++tot5][5] = s[tot2--][2];s[++tot6][6] = s[tot3--][3];s[++tot5][5] = s[tot--][1];continue;}s[++tot5][5] = que[head++];s[++tot6][6] = i;}}else if (a[i] == '5')s[++tot4][4] = i;for (int i = 1;i <= cnt / 6;i ++){for (int j = 1;j <= 6;j ++){printf("%d ",s[i][j]);s[i][j] = 0;}printf("\n");}}return 0;
}
后来找了很久反例依然没找到,于是直接写正解去了。
正解很简单,把"14"看为一个整体,记为A,那么就是找出所有"1A5A";于是先将4和最近的前面的1进行配对,然后贪心地把每个A分配给最前面的1即可。注意在初次配对找出所有的A时,要倒着枚举。(这大概就是和我错误思路的主要区别了,我是顺着枚举,因此可能有一些很难处理的问题吧)
时间复杂度 O ( T ∣ S ∣ ) O(T|S|) O(T∣S∣).
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;int t,cnt;char a[600006];bool vis[600006];int lst[600006];int que[600006];int s[100001][7];
int main()
{scanf("%d\n",&t);while (t --){cnt = 0;string t;getline(cin,t);for (int i = 0;i < t.size();i ++)if (t[i] == '1' || t[i] == '4' || t[i] == '5')a[++cnt] = t[i];int head = 1;int tail = 0;for (int i = cnt;i >= 1;i --)if (a[i] == '4')que[++tail] = i;else if (a[i] == '1' && head <= tail){int now = que[head++];lst[now] = i;vis[i] = true;}head = 1;tail = 0;int tot = 0;int tot1 = 0;int tot2 = 0;for (int i = 1;i <= cnt;i ++)if (a[i] == '1' && (!vis[i]))que[++tail] = i;else if (a[i] == '4'){if (tot < cnt / 6 && head <= tail){s[++tot][1] = que[head++];s[tot][2] = lst[i];s[tot][3] = i;}else{s[++tot2][5] = lst[i];s[tot2][6] = i;}}else if (a[i] == '5')s[++tot1][4] = i;for (int i = 1;i <= cnt / 6;i ++){for (int j = 1;j <= 6;j ++)printf("%d ",s[i][j]);printf("\n");}for (int i = 1;i <= cnt;i ++)vis[i] = false;}return 0;
}
【美团杯2020】114514 解题报告相关推荐
- 美团杯2020:查查查乐乐(dp)
A. [美团杯2020]查查查乐乐 "查查查乐乐"是一段古老神秘的咒语,只有被选中的魔法师才有资格使用这一段咒语并享用它所带来的力量:而如果这段咒语出现在了不具资格的魔法师的口中, ...
- 【美团杯2020】字符串处理:查查查乐乐
美团杯:签到题 我:一个小时自闭题 查查查乐乐 [题目] "查查查乐乐"是一段古老神秘的咒语,只有被选中的魔法师才有资格使用这一段咒语并享用它所带来的力量:而如果这段咒语出现在了不 ...
- 【UOJ529】【美团杯2020】114514
题目链接 点击打开链接 题目解法 可以发现,在给定的序列 114514 114514 114514 中,每个 4 4 4 之前均有一个 1 1 1 . 因此,从后向前,将每个 4 4 4 与前方最近的 ...
- 2020年蓝桥杯模拟赛解题报告(Python真香)
第一题 单位变换 题目 [问题描述] 在计算机存储中,15.125GB是多少MB? [答案提交] 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填写这个整数,填 ...
- 美团杯2020 - 半前缀计数(后缀自动机)
题目链接:点击查看 题目大意: 蒜斜刚来PKU的时候还不知道有"北大算协"这个社团,因此他总是觉得周围的人在偷偷议论着他,比如说: "算协(注:非蒜斜)举办的活动好有趣啊 ...
- 美团杯2020 - 平行四边形(原根)
题目链接:点击查看 题目大意: 蒜斜非常喜欢下围棋.自从AlphaOg面世以来,他就立志一定要研究出AlphaOg的破绽. 终于,他发现当AlphaOg遇到一种特殊局面后,它的神经网络会自动输出&qu ...
- 第九届(2018)蓝桥杯 山东省赛解题报告(题目+分析+代码)
1标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. [答案]:125 2标题:明码 汉字的字形 ...
- 第三届蓝桥杯java本科解题报告
1. [结果填空]黄金分割数0.618与美学有重要的关系.舞台上报幕员所站的位置大约就是舞台宽度的0.618处,墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子 ...
- [蓝桥杯解题报告]第十届蓝桥杯大赛省赛(软件类)真题C++A组 Apare_xzc
蓝桥杯第十届省赛软件类C++A组解题报告 Apare_xzc 2020/2/13 考生须知 A. 平方和(5分) 分析: 这个题就是简单的模拟.只要循环一遍,判断每个数是否含有2019,然后平方相加即 ...
最新文章
- QT 中使用 OpenCv 的 CascadeClassifier 报错
- PCI与PXI的区别
- Day 8: Harp.JS——现代静态web服务器
- python 抛出异常与自定义异常raise
- 中国物联网2020年将达到1660亿美元的市场规模
- 记一次更改了电脑名称后遇到的各种错误反思及感想
- 2018年冷链百强_在分析了47,251个依赖关系之后,2016年Java图书馆百强
- AVS解码器在DSP平台上的优化
- Unity在运行时(代码中)设置材质的渲染模式(RenderingMode)
- 什么浏览器好用_手机浏览器不只UC,好用的浏览器还有这些
- Python精通-Python元组操作
- Bootstrap 工具提示插件Tooltip 的选项
- ElasticSearch的搜索推荐(typeahead)
- Yahoo Programming Contest 2019 E - Odd Subrectangles
- Python 必备要点总结及环境搭建(上)
- java服务器必读_Java服务器端编程安全必读
- 阿里云何勉:如何定义团队的研发效能?
- zabbix基础·配置短信报警
- 【PTA】藏头诗:输入四句古诗,输出每句诗的第一个字。
- Web变灰-grayscale
热门文章
- 猎豹MFC--画文本和字体DrawText TextOut CFont 阴影
- easyexcel填充excel模板数据,多sheet采用不同方式进行填充
- JAVA 很简单的字符串数据公式代入计算
- 使用python实现pca算法
- 表格table及单元格合并
- 算法题:将生成1-5随机数函数转换为1-7随机数函数
- 【目录导航】编程模拟自然系列博文
- EXCEL round()roundup() rounddowm()使用
- 【论文笔记】Shunted Self-Attention via Multi-Scale Token Aggregation 论文笔记及实验
- 【华为机试】火星文计算