【Codeforces】 题解 - Round 706 (Div.2)
本文合作者:laybxc
赛事信息
名称
出题人
开始时间
时长
官方题解
Codeforces Round #706 (Div. 2)
Daniel_yuanImakfsmg23333waaitg
Mar/10/202120:05 (UTC+8)
02:00
Tutorial (en)
A. Split it!
题目
题目描述
给出一个长度为 nnn 的字符串 sss 和一个整数 kkk ,问其能否划分为如下形式:
s=a1+a2+⋯+ak+ak+1+R(ak)+R(ak−1)+⋯+R(a1)s=a_1+a_2+\dots+a_k+a_{k+1}+R(a_k)+R(a_{k-1})+\dots+R(a_1)s=a1+a2+⋯+ak+ak+1+R(ak)+R(ak−1)+⋯+R(a1)
其中, R(x)R(x)R(x) 表示将 xxx 反转得到的字符串。
输入格式
第一行是一个整数 t(1≤t≤100)t(1≤t≤100)t(1≤t≤100) ,表示数据组数。
每组数据第一行有两个整数 n,k(1≤n≤100,0≤k≤⌊n2⌋)n,k(1≤n≤100, ...
【Codeforces】 题解 - Round 705 (Div.2)
本文合作者:laybxc
赛事信息
名称
出题人
开始时间
时长
官方题解
Codeforces Round #705 (Div. 2)
74TrAkToRAlFlen
Mar/06/202122:05 (UTC+8)
02:15
Tutorial
A. Anti-knapsack
题目
题目描述
给定 n,kn,kn,k ,请选择 1−n1-n1−n 的若干个整数,使得这些整数的和的子集都不等于 kkk ,问最多能选出几个整数且分别是多少。
输入格式
第一行是一个整数 t(1≤t≤100)t(1≤t≤100)t(1≤t≤100) ,表示数据组数。
每组数据有两个整数 n,k(1≤k≤n≤1000)n,k(1≤k≤n≤1000)n,k(1≤k≤n≤1000)
输出格式
对于每组数据
第一行输出一个整数 mmm ,表示最多能选出的整数数量。
第二行输出这些选出的整数,顺序任意。
解决方案:
思路:
显然对 i∈[1,n]i ∈[1,n]i∈[1,n] , i>ki>ki>k 时 iii 这个数肯定可以直接选
i=ki=ki=k 显然不行
...
【OI考古】动态规划 | 动态规划基础
动态规划(Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
最长上升子序列(LIS)
给出一个序列 a1,a2,...,an−1,ana_1, a_2, ...,a_{n-1}, a_na1,a2,...,an−1,an ,求其最长不下降(或上升)子序列。
求最长上升子序列(LIS)的算法是Yukko介绍给我的第一个算法。
解决方案( O(n2)O(n^2)O(n2) )
状态设计:
dp[i]dp[i]dp[i] 表示以第 iii 个数结尾的最长上升子序列的最长长度。
状态转移方程:
dp[i]=max(dp[j])+1(1≤j<i,且a[i]>a[j])dp[i]= max(dp[j])+1 \quad (1≤j<i, 且a[i]>a[j])dp[i]=max(dp[j])+1(1≤j<i,且a[i]>a[j])
1234567891 ...
【OI考古】图论 | 最短路算法
解决单源最短路径问题的几种算法,是Yukko最早给我介绍的几类算法之一。
最短路算法的基本功能,是求解带边权的有向或无向图中任意两点之间最短或最长的路径及其距离。
模板题:洛谷 P4779 | [模板]单源最短路径(标准版)
题目描述
给定一个 nnn 个点, mmm 条有向边的带非负权图,请你计算从 sss 出发,到每个点的距离。
数据保证你能从 sss 出发到任意点。
输入格式
第一行为三个正整数 n,m,sn, m, sn,m,s 。 第二行起 mmm 行,每行三个非负整数 ui,vi,wiu_i, v_i, w_iui,vi,wi ,表示从 uiu_iui 到 viv_ivi 有一条权值为 wiw_iwi 的有向边。
输出格式
输出一行 nnn 个空格分隔的非负整数,表示 sss 到每个点的距离。
输入输出样例
输入 #1
12345674 6 11 2 22 3 22 4 11 3 53 4 31 4 4
输出 #1
10 2 4 3
说明/提示
1≤n≤1051≤n≤10^51≤n≤105 ;
1≤m≤2×1051 \leq m \leq 2\times 10^ ...
CS231n | 课程作业 Assignment1 | K近邻算法 KNN
KKK 近邻算法(k-Nearest Neighbor)是CS231n课程介绍的第一个算法,此算法和神经网络没有任何关系,实际中也极少使用,但学习使用KNN算法可以获得对图像分类方法的基本认知。
先决条件
在开始写作业前,你需要做一些准备工作。
Jupyter Notebook先决条件
你可以在这里下载官方提供的CS231n Assignment1的 Jupyter笔记本。
在Anaconda Prompt Powershell中输入conda activate cs231,接着cd到assignment1目录下,输入jupyter notebook开启Ipython笔记本,打开knn.ipynb即可开始本次作业。
在开始之前,需要注意,由于Jupyter Notebook的某种bug,CIFAR-10的路径变量cifar10_dir需要赋值为绝对路径,同时在路径前加上r来忽略转义,像下面这样:
12# Load the raw CIFAR-10 data.cifar10_dir = r'D:\Users\VonBrank\Documents\GitHub\code-lear ...
【OI考古】数论基础 | 快速幂、最大公约数、线性筛素数
介绍几种入门级的数论算法
CS231n | 先决条件 Preparation
近期在和朋友做计算机视觉相关的年度项目,根据导师的建议,我们选择了Stanford的CS231n课程作为计算机视觉的入门课程。然而由于某些原因, 初期的学习线路出了一些偏差, 临近中期才发现CS231n官方提供了非常完善的笔记和作业文档,免去了大面积重复造轮子的工作,只需要编写部分核心代码。因此我决定重修CS231n课程,写下这一系列文章记录学习过程。
本文提供开始学习前CS231n的准备步骤,主要翻译自官方提供的Software Setup文档,供日后查询。
使用Google Colaboratory工作
在本地设备上工作
配置Anaconda虚拟环境
CS231n官方推荐使用Anaconda搭建Python编程环境并管理Numpy等包及其依赖项。这样做的好处之一在于,其自带MKL优化,这可以加速numpy与scipy代码的执行。
Anaconda虚拟环境的搭建在其他文章中已做介绍,在此不再赘述。
安装完Anaconda后,需创建名为cs231n的虚拟环境,可以在终端中运行以下指令创建:
123# 这将在'path/to/anaconda3/envs/'下创建# ...
【OI考古】基础算法 | 排序
排序算法(Sorting algorithm)是一种将一组特定的数据按某种顺序进行排列的算法。排序算法多种多样,性质也大多不同。
几种排序算法的比较:
模板题:洛谷 P1177 | [模板]快速排序
题目描述
利用快速排序算法将读入的 NNN 个数从小到大排序后输出。
输入格式
第 111 行为一个正整数 NNN,第 222 行包含 NNN 个空格隔开的正整数 aia_iai ,为你需要进行排序的数,数据保证了 aia_iai 不超过 10910^9109 。
输出格式
将给定的 NNN 个数从小到大输出,数之间空格隔开,行末换行且无空格。
输入输出样例
输入 #1
1254 2 4 5 1
输出 #1
11 2 4 4 5
说明/提示
对于 20%20\%20% 的数据,有 N≤103N\leq 10^3N≤103 ;
对于 100%100\%100% 的数据,有 N≤105N\leq 10^5N≤105 。
快速排序
快速排序(Quicksort),又称分区交换排序(partition-exchange sort),简称快排,是一种被广泛运用的排序算法。
解决方案
12345 ...
【OI考古】基础算法 | 搜索
搜索,是Yukko首先给我介绍的几类算法之一,其对状态空间进行枚举,通过穷尽所有的可能来找到最优解,或者统计合法解的个数。
搜索有很多优化方式,如减小状态空间,更改搜索顺序,剪枝等。
搜索是一些高级算法的基础。在 OI 中,纯粹的搜索往往也是得到部分分的手段,但可以通过纯粹的搜索拿到满分的题目非常少。
DFS(深度优先搜索)
DFS 本是图论概念,在搜索算法中,该词常常指利用递归函数方便地实现暴力枚举的算法,与图论中的 DFS 算法有一定相似之处,但并不完全相同。
DFS框架
123456789101112131415161718192021222324252627282930313233#include <cstdio>using namespace std;const int maxn = 100;int n;bool vst[];bool CheckEdge(...) // 边界条件和约束条件的判断{ if (...) // 满足条件 return 1; else // 与约束条件冲突 return 0;}v ...
Anaconda部署与使用指南(Windows)
这几天在计划在重修 (bushi) Stanford University的计算机视觉基础课CS231n,在其课程作业(Assignments)中推荐使用Anaconda为课程创建虚拟环境以完成作业。本文将简要介绍Anaconda在Windows下的使用方法。
先决条件
对于许多Python初学者(比如我)来说,也许难以理解为什么需要需要像Anaconda这样的虚拟环境工具,因此会对项目中涉及此类工具的环节和操作感到一头雾水。因此在了解Anaconda的使用方法前,应先理解其存在的目的。
Python解释器
初学Python的人大都有过这样的经历:
依照教程到Python官网下载某个特定的安装包
安装时记得勾选将Python设为环境变量的选项
然后打开控制台,输入python,出现以下信息即表明Python安装成功
接着就可以在各类ide或文本编辑器愉快地写代码了
过了不久,我们会知道,某些代码运行在Python 2.x上,与Python 3.x不兼容,需要再安装一个Python 2.x的解释器,这时需要想办法使两款解释器共存。问题不难解决,只是在切换环境变量比较 ...