常用模板(自己整理)
第一讲_基础算法快速排序#include<iostream>using namespace std;const int N = 1e6 + 10;int n; // 数组实际长度int q[N]; // 存储待排序元素的数组void quick_sort(int q[], int l, int r){ // 如果 l>=r,说明区间内元素数量不超过1,无需排序 if(l >= r) return ; // 选择基准值:取中间位置的元素 int x = q[l + r >> 1]; // 初始化左右指针 int i = l - 1, j = r + 1; // 双指针扫描,将数组分为两部分 while(i < j) { // i指针右移,找到第一个大于等于基准值的元素 do i++; while(q[i] < x); // j指针左移,直到找到第一个小于等于基准值的元素 ...
luogu_P1433
题目大意&链接有 n 块奶酪,小老鼠从 (0, 0) 点出发,要吃掉所有奶酪,求跑过的最少距离。输入输出:输入为奶酪数量 n 以及每块奶酪的横、纵坐标 xi, yi;输出为保留两位小数的最少跑动距离。 输入输出样例:输入: 41 11 -1-1 1-1 -1 输出: 7.41 详情:luogu_P1433 解题思路状态压缩与记忆化搜索: 状态表示:使用 pos 表示当前所在奶酪的索引,deep 表示已吃奶酪的数量,len 表示已跑过的距离,path 是一个整数,通过位运算(状态压缩)记录已经访问过的奶酪(每一位代表一块奶酪是否被访问 )。 记忆化:dp[pos][path] 存储从当前状态(在 pos 号奶酪位置、已访问 path 对应奶酪集合 )出发,吃完剩余奶酪所需的最短距离增量。避免重复计算相同状态,大幅减少递归次数。 AC代码附上// 要吃掉所有奶酪,求跑过的最少距离#include <bits/stdc++.h>using namespace std;const int N = 20;int n; // 奶酪数量//...
记25_7_15
总结英语背了一个小时单词
记25_7_14
总结英语背了一个小时单词
记25_7_13
总结英语背了一个小时单词
记25_7_12
总结英语背了一个小时单词
记25_7_11
总结英语背了一个小时单词
cf_246D
前言上次集训赛(周三)刷到一个特别有意思的题,关于图论的。当时没刷多少图论的题目,所以图论算法这块一直都挺畏惧的hhh~~,但这个题目让我重新认识到有的图论原来并不难,只是披着羊皮的狼,这个题目我是用 map 映射做的,今天想起才来写个关于它的题解,题目链接放在后面。 题目大意&链接本题要求找出图中邻居颜色多样性最大的顶点颜色。具体来说,对于颜色 k,需统计所有属于颜色 k 的顶点的邻居颜色集合的大小(去重),最终输出该值最大的颜色(若有多个,选数值最小的)。 输入输出样例:输入: 6 61 1 2 3 5 81 23 21 44 34 54 6 输出: 3 详情:cf_246D 解题思路 输入处理与颜色去重:用数组 s 存储所有唯一颜色,用数组 flagc 标记颜色是否已存在,确保数组 s 中颜色唯一。 int idx = 0;for (int i = 1; i <= n; i++) { cin >> c[i]; if (!flagc[c[i]]) //去重 s[++idx] = c[i],...
记25_7_10
总结英语背了一个小时单词
记25_7_9
总结校集训侥幸拿了 NO.2 哈哈哈~~ 英语背了一个小时单词,又总结出一点经验和方法,以后 60 min 稍微记慢点,把每个单词的意思都要看完!!!,过完一轮乱序版后再改用正序版背一遍看哪个效果好