摘要: 高精度 乘法 vector<int> multi(vector<int> a,vector<int> s){ int t=a.size(); vector<int> ans(t,0); t=0; int ta,ts; for(int i=0;i<ans.size();i++){ if(a[i]!=0 阅读全文
posted @ 2025-03-04 15:56 C微 阅读(23) 评论(0) 推荐(0)
摘要: 解题历程: 我首先想到的是等效法,每一次操作可以等效为每次将第一个人抽出放入一组,后面的人往前移,而该组的人就是可以任意放置的人,当b中后面再出现与前一个相同的人时,就不进行操作,当b中出现不同的人时,就看看这组中有没有这个人,有的话就下一个循环,没有的话就看看这个新的人是否按a中的顺序出现,若是没 阅读全文
posted @ 2024-10-13 23:10 C微 阅读(15) 评论(0) 推荐(0)
摘要: 解题历程: 看到两边同时移动,计算最终的相遇时间,我就想到两边同时计算各点到起点的最短距离,就是使用dijstra算法,最后所有节点取两次计算的最大值,再对所有节点取最小值,就是最终答案了,可是这个思路没有考虑有马的情况,思考一番后发现可以多列一个数组记录有马的情况下的行走最短路,然后将有马和无马取 阅读全文
posted @ 2024-10-09 22:15 C微 阅读(17) 评论(0) 推荐(0)
摘要: 解题历程: 看到题目要求要用最少的消除次数让所有叶子深度相同,通过观察,那么就只需要将所有深度都尝试一遍就行了,可是我当时没多想就用dfs记录所有节点的深度,单独将所有叶子和该叶子的深度存起来,记录最大的深度,从最大深度尝试到深度0,对于深度小于当前尝试深度的叶子,用dfs的方式将与该叶子直接关联的 阅读全文
posted @ 2024-09-30 18:47 C微 阅读(69) 评论(0) 推荐(0)
摘要: 解题历程: 开始想的是用数学公式的方法,利用公式推出二次函数,再求出根,再用根求出答案,检查了一个小时,结果怎么改都有细微的偏差,最后发现答案先单调递减在单调递增,那么可以用二分答案的方法查找最小的答案,二分对细节的处理要求比较高,于是在二分中加入了一个限制,当二分的区间小于5时,就直接遍历五个答案 阅读全文
posted @ 2024-09-26 19:54 C微 阅读(17) 评论(0) 推荐(0)
摘要: 解题历程: 首先想到的是用数组记录,遍历每一个任务的区间,对区间内的数值加1,比如对于发生在4和8天之内的任务,a[4]++,a[5]++……a[8]++。然后用双指针,记录持续天数的开始下标和结束下标,以l和l+d为边界的窗口遍历每一天,若是最高位寻找任务最多的一天,和区间最大值最小的一天。 后来 阅读全文
posted @ 2024-09-24 12:46 C微 阅读(28) 评论(0) 推荐(0)