摘要: 原题链接 导论 1.第一想法是贪心,但是很显然,贪心不行,如果a[i]很小,b[i]很大,b[i]就永远不会用到 2.所以要有动态规划的思想,即把每种可能的情况都保留下来,以后可能用到 一些事实 不管我怎么选择完成任务的顺序,我至少会把前i种任务完成至少一遍,即a[i] 在假设我最多只完成到前i种任 阅读全文
posted @ 2023-12-20 18:56 纯粹的 阅读(23) 评论(0) 推荐(0)
摘要: 原题链接 快速读题 给出一个序列,使其满足\(a[i]>a[i-1],i>1\)成立的次数恰好为k 思路 只要满足条件的序列都算作成立,我们就可以特殊化 先做出一个单增序列,由于前半部分所有元素都满足条件,所以前半部分保留(k+1)个元素,翻转后(n-k-1)个元素 但是sort默认升序,所以我们倒 阅读全文
posted @ 2023-12-20 18:48 纯粹的 阅读(16) 评论(0) 推荐(0)
摘要: 原题链接 结合样例读题 1.输入序列代表每一时刻思考的题目 2.如果思考的题目时长超过给定值就代表题目解决。 综上 如果一个字符的出现次数大于给定值就代表解决了这个问题。 代码 #include<bits/stdc++.h> using namespace std; int main() { int 阅读全文
posted @ 2023-12-20 18:30 纯粹的 阅读(34) 评论(0) 推荐(0)
摘要: 原题链接 反思 要明确每个变量的含义!!! 读题 1.取一对01置换,或者删掉一个元素,使得经过若干次改变后的序列\(t\),和\(s\)的前\(|t|\)项元素各不相同。求问最少要删掉几个元素? 一些事实的思考 1.对于一个给定的序列\(a\),和另一个 “0的个数”与“1的个数”均相同,但是排列 阅读全文
posted @ 2023-12-19 11:51 纯粹的 阅读(95) 评论(0) 推荐(0)
摘要: 原题链接 快速读题 将所给字符串分为两个部分,前半部分为a,后半部分为b。求问是否存在某种分法使得a<b 思路:贪心 分割方法:字符串的第一个数一定非零作为a的开头,找到第二个非零数作为b的开头 判断方法:因为\(ab\)长度不超过8,而int型最大约\(2\cdot10^{10}\),所以可以直接 阅读全文
posted @ 2023-12-19 11:32 纯粹的 阅读(61) 评论(0) 推荐(0)
摘要: 原题链接 反思:要把各种可能的情况都判断一遍再提交!不要急着提交 简介 仓库里有若干个二次方数,请问是否能取出若干数使得刚好等于给定数? 情况讨论 情况1.仓库里只有一个4,但是我要求2,求不得 情况2.仓库里有三个1,我要求3,能求 大概思路 从\(i\in[log2(v),0]\)遍历(从大到小 阅读全文
posted @ 2023-12-19 10:48 纯粹的 阅读(123) 评论(0) 推荐(0)
摘要: 原题链接 看代码,懂得都懂,不懂就真不懂 #include <bits/stdc++.h> using namespace std; string str, head, send; int N, M, K; int main() { cin >> str; cin >> N; while (N--) 阅读全文
posted @ 2023-12-18 21:01 纯粹的 阅读(121) 评论(0) 推荐(0)
摘要: 原题链接 思路历程 1.一开始我不知道具体该怎么放,于是我按照样例2的顺序手画了一遍。 2.然后发现,对于一个n*n的矩形,再放一个格子最大能使其达到(n+1)*(n+1) 3.1*1时,放了1个格子,2*2时放了2个格子,由此可以推出放n个格子时最大能达到n*n 4.这道题就变成了,找出k使得k* 阅读全文
posted @ 2023-12-18 10:45 纯粹的 阅读(25) 评论(2) 推荐(1)
摘要: 原题链接 前情提要 题目不难看懂,即求a->b过程中的所有点的延迟和。显然可以暴力遍历一遍完成,但是时间复杂度太高了。 改进算法 想象这个图是由点和线组成的,把其中一个点提起来,这样就变成了一个树(n叉树),任意两点(a,b)间的延迟和等于a->lca->b,其中lca为ab两点的最近公共祖先 这样 阅读全文
posted @ 2023-12-12 11:26 纯粹的 阅读(73) 评论(0) 推荐(0)
摘要: 1.已知有路径算距离。 2.状态转移方程解读:在必须经过这个点的情况下,距离会不会更短? 3.wait til more 阅读全文
posted @ 2023-12-11 20:36 纯粹的 阅读(17) 评论(0) 推荐(0)