信息学奥赛
未读
A. 字符串按照题意模拟即可,如果想要省掉代码量可以开个 std::vector<std::pair<char, int>> ve(n) 前一个记录字符,后一个记录当前的下标,直接进行升序排序,然后直接从k+1个开始输出。 提供排序的代码。
12345678910111213141516171819202122void clearlove13(void){ int n, k; std::cin >> n >> k; std::string s; std::cin >> s; std::vector<std::pair<char, int>> ve(n); for (int i = 0; i < n; i++) { ve[i] = std::make_pair(s[i], i); } std::sort(ve.begin(), ve.end()); std::vector<std::pair< ...
洛谷
未读![题解:P14702 [ICPC 2024 Tehran R] Boat](https://image.rusin7.com/file/hexo/cover/kuKbfhkc.webp)
题目传送门
贪心,细节较多。
思路分析先特判无解情况。
提示
如果某个重量大于最大载重量 $w$,输出 −1,结束。
如果最轻的两个人重量之和超过了 $w$,即无人可以当船夫,输出 −1,结束。
否则一定有解,尽量让两人配对上船,为了用最少次数,先 sort 从小到大排序,再让最轻的人作为船夫,分为两种情况:
如果 $a_i+a_1 \leq w$,可以和最轻的人一起上船,可载两人。这样运送要 $2$ 次,$ans \leftarrow ans+2$。
否则,不可以和最轻的人一起上船,只载一人。这样运送要 $4$ 次,$ans \leftarrow ans+4$。
最后船夫不回来,所以输出 $ans-1$。
代码按思路写即可,注意细节,这里不放了。
结语感谢您的阅读!
洛谷
未读![题解:P14731 [ICPC 2022 Seoul R] Parentheses Tree](https://image.rusin7.com/file/hexo/cover/kuKbfhkc.webp)
P14731 [ICPC 2022 Seoul R] Parentheses Tree
题目传送门
前置知识STL 中的 stack 容器提供了一众成员函数以供调用,其中较为常用的有:
定义
头文件 $\color{green}\textbf{}$。
元素访问
st.top() 返回栈顶。
修改
st.push() 插入传入的参数到栈顶。
st.pop() 弹出栈顶。
容量
st.empty() 返回是否为空。
st.size() 返回元素数量。
部分内容来自 栈 - OI Wiki。
总体分析核心:用栈匹配括号并在叶节点累加距离。
思路引导
提问
如何对左括号进行判断是否为叶节点?
成功
当 $s_i$ 为 ( 时,如果栈非空,将栈顶替换为 false,再将 true 入栈。
提问
如何将答案进行累加?
成功
当 $s_i$ 为 ) 时,如果栈顶 ( 是叶子节点,先累加栈内元素数量,再弹出栈顶。
警告
不开 long long 见祖宗。
...
生活
未读1111
居中内容。
追忆我常常追忆过去。
生命瞬间定格在脑海。我将背后的时间裁剪、折叠、蜷曲,揉捻成天上朵朵白云。
云朵之间亦有分别:积云厚重,而卷云飘渺。生命里震撼的场景掠过我的思绪便一生无法忘怀,而更为普通平常的记忆在时间的冲刷下只留下些许残骸。追忆宛如入梦,太过清楚则无法愉悦自己的幻想,过分模糊却又坠入虚无。只有薄雾间的山水,面纱下的女子,那恰到好处的朦胧,才能满足我对美的苛求。
追忆总在不经意间将我裹进泛黄的纸页里。分别又重聚的朋友,推倒又重建的街道,种种线索协助着我从一个具体的时刻出发沿时间的河逆流而上。曾经的日子无法重来,我只不过是一个过客。但我仍然渴望在每一次追忆之旅中留下闲暇时间,在一个场景前驻足,在岁月的朦胧里瞭望过去的自己,感受尽可能多的甜蜜。美好的时光曾流过我的身体,我便心满意足。
过去已经凝固,我带着回忆向前,只是时常疏于保管,回忆也在改变着各自的形态。这给我的追忆旅程带来些许挑战。
我该在哪里停留?我问我自己。
洛谷
未读![题解:P14730 [ICPC 2022 Seoul R] Palindrome Type](https://image.rusin7.com/file/hexo/cover/kuKbfhkc.webp)
纯享阅读区题目传送门
总体分析核心:修改字符串 $s$ 使其成为回文串,记最小次数为 $k$,如果 $k\leq3$,输出 $k$,否则输出 -1 。
因此,可以从 $k=0\sim3$ 依次进行 DFS 搜索,只要有一次成功,输出 $k$,结束。
思路引导提问如何 DFS 搜索修改过程算出 $k$?
DFS 函数使用 双指针。
当 $l<r$ 时:
如果左指针 $l$ 和右指针 $r$ 对应的 $s_l=s_r$,那么这部分已经是回文的,$l$ 向右移,$r$ 向左移。
否则:
如果剩余次数 $step=0$,无法继续修改,返回无法完成。
如果删除 $l+1$ 或 $r+1$ 可完成,返回可以完成。
否则返回无法完成。
返回无法完成。
警告如果 $k\leq 3$ 都不可以,最后输出 -1 。
核心代码12345678910111213bool dfs(int l, int r, int step){ while(l<r){ if(s[l]==s[r])l++,r--; else{ ...
洛谷
未读
AT_joi2024_yo1c_b 桁 (Digit)题解安利一下自己的博客
题目传送门
题目大意给出 $a,b$,求 $a+b$ 的位数。
思路引导
提问
如何统计 $a+b$ 的位数?
成功
我们将 $a+b$ 转化为字符串函数大法好,输出 $a+b$ 的长度即可。
核心代码123456789#include<bits/stdc++.h>using namespace std;int a,b;int main() { cin>>a>>b; cout<<to_string(a+b).size();//需使用洛谷IDE中C++14 (GCC 9)及以上版本,蓝C++会CE return 0;}//By _ruyingsuixing_(UID:1620655)
洛谷
未读
CF2139B Cake Collection安利一下博客🥳🎆🎉祝大家 2026 新年快乐!
纯享阅读区
题意分析核心:用 $m$ 秒去拿 $n$ 个烤好的蛋糕,要拿的尽量多。用 贪心 算法。
思路引导
提问
如何保证能选到最好的方案?
成功
对数组 $a$ 从大到小进行排序,如果 $n \le m$,则可以把所有烤箱中的蛋糕都拿一遍,生产蛋糕越多的越晚拿,且后面会给出证明:早拿一次再晚拿一次和直接晚拿一次一样,不如直接晚拿一次简单。否则 $n>m$,就直接拿排序后最好($a_i$ 较大)的烤箱中的蛋糕,同样,生产蛋糕越多的越晚拿。
综上,取个 $\min {n,m}$ 即可。
Tip
从大到小进行排序不用手写 cmp 了!使用 greater<int>() 可以直接大到小进行排序。示例代码:
1sort(a+1,a+n+1,greater<int>());//对数组 a 从大到小进行排序
提问
如何证明早拿一次再晚拿一次同一个烤箱,和直接晚拿一次一样?
...
其他
未读博客迁移分流说明在我的第一个博客陪伴大家 $4$ 个月后,由于当时技术较差,不会使用 git 命令行和 node.js,所以不够美观,现决定将信息技术类文章迁移至此,将生活小记保留原博客,望周知。
谢谢你们的支持!
1234567891011121314<style>.big-font { font-size: 50px; /* 字体大小保持原样 */ font-weight: bold;}</style><body> <!-- 倒计时容器 --> <div id="countdown" class="big-font"></div> <script data-pjax defer src='/js/clock.js'></script> <div class="pjax-reload"></div> </body>
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems w ...
