自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(494)
  • 资源 (1)
  • 收藏
  • 关注

原创 3D 游戏编程与设计 - 空间与运动

简答并用程序验证1游戏对象运动的本质是什么?游戏对象运动的本质是变换游戏对象自身的坐标。在游戏开发中,我们可以通过矩阵变换的方式实现游戏对象的变换,比如:public class TranslationScript : MonoBehaviour{ // 游戏对象的迁移方向向量,向量模长为平移速度,向量方向为平移方向 Vector3 translation = new Vect...

2019-09-21 21:54:30 607

原创 3D 游戏编程与设计 - 离散仿真引擎基础作业

简答题1.解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。GameObject 是运行时在场景中被渲染的实体对象。而 Asset 是可复用的 GameObject 或 GameObject 的集合。也就是说,Asset 是一些将大量被复用的 GameObject 的组合方式,也就是说,如果将 Asset 视为类,那么 GameObject 相当于类的对...

2019-09-13 20:39:04 410

原创 3D 游戏编程与设计 - Minecraft 游戏介绍

作业要求介绍Minecraft 是一款有关放置方块与探险的 3D 沙盒游戏。玩家出生在一个拥有无限可能性的世界中,这个世界可以无限探索,玩家在世界中没有游戏目标,也没有固定的游戏模式。在游戏过程中,玩家必须探索世界、收集资源、制作工具、修建房屋、战斗。Minecraft 游戏中拥有不止一个世界,玩家在探索出生的主世界时,还可以通过传送门进入其他不一样的世界(比如地狱、末地、月球等世界)进行探...

2019-09-08 13:22:51 1327

原创 服务计算 - Go 开发环境安装

中山大学数据科学与计算机学院 软件工程 2017级 服务计算作业,17343050安装 GolangUbuntu 18.04 默认的 apt 源中包含的 golang-go 包是 Go 1.10,并不是最新版,因此添加非官方的软件源以获得 Go 1.13。添加了软件源之后,我们就可以通过命令 sudo apt install golang-go 安装 Go 1.13 了。创建...

2019-09-08 11:51:40 395

原创 服务计算 - 让你的计算机也能提供云桌面服务

中山大学数据科学与计算机学院 软件工程 2017级 服务计算作业,17343050想到云计算、云平台,立马觉得高深莫测。如果你想搭建自己使用的桌面云,使用 VirtualBox 这样的开源软件,仅需要几十分钟或几个小时就能如你所愿。实验目的初步了解虚拟化技术,理解云计算的相关概念理解系统工程师面临的困境理解自动化安装、管理(DevOps)在云应用中的重要性实验环境与要求用户...

2019-09-07 23:27:01 295

原创 C++ 模板简介(四)—— Any

Any你有没有过需要在 C++ 中使用类似 object 这种通用类型的需求呢?C++ 中如何类型安全地保存一个什么类型都有可能是的变量?(这个大概算类型擦除?)导入如果你写过一些与运行时状态有关的东西,比如一个列表中的数据可能是任意一种数据,或者比如 SQL 数据表中的一行可能是很多的类型,这个时候你需要用一个 vector 保存,如果在其他语言里,你可以:List<object&...

2018-12-18 14:58:33 457 3

原创 C++ 模板简介(三)—— Tuple

Tuple导入我们可以通过 std::tuple 构造一个复合类型,比如可以使得函数拥有“多个”返回值:std::tuple<int, int> divide(int a, int b) { return make_tuple(a / b, a % b);}然后我们可以通过 get<> 函数来获得 tuple 内存储的值:auto result = d...

2018-12-18 14:57:15 337

原创 C++模板简介(二)—— 模板元编程

编译期的整数操作​ 模板元编程是一个挺有意思 (但是毫无卵用) 的东西。比如我们可以实现编译期的快速排序。(但是 constexpr 函数基本把这部分给废掉了)导入​ 下面是一个例子:template <int A, int B>struct add { static constexpr int value = A + B; };cout << add<...

2018-12-18 14:56:31 1524 3

原创 C++ 模板简介(一)—— SFINAE

SFINAE, 类型检查, Concepts​ SFINAE 机制是组成 C++ 模板机制及类型安全的相当重要的基础。全称是 Substitution failure is not an error。大概的意思就是只要找到了可用的原型(比如函数模板、类模板等)就不会编译错误。SFINAE 可以被用来进行模式匹配。在尝试本篇代码时请打开 C++17。https://en.cppreference...

2018-12-18 14:55:07 990

原创 C++ 模板简介(零)—— 简介

C++ 模板简介首先推荐 C++ 官方模板介绍SFINAE(很多内容被 Concepts 取代)Meta programming(很多内容被 constexpr 函数取代)TupleAny(看完上面介绍你就觉得全部讲的毫无用处了)建议你先了解一下模式匹配与模板偏特化是什么东西,否则你可能 4 篇文章都看不懂。模式匹配模式匹配指的是,检查某一个词汇序列是否满足给定的一些模板。对...

2018-12-18 14:54:09 410

原创 TopCoder SRM 590 FoxAndCity | 2017 ICPC Xian E

题目大意给定一个无向图,每条边的边权固定为 1,现在你可以自己加一些边权也为 1 的边,最小化∑i=1n(Ai−disti)2 \sum_{i=1}^n (A_i-dist_i)^2 i=1∑n​(Ai​−disti​)2其中 distidist_idisti​ 表示第 i 个点到 1 的最短路长度。题解现在我们要最小化 ∑i=1m(Ai−disti)2\sum_{i=1}^m (A_i...

2018-10-26 21:44:54 550

原创 Southeastern European Regional Programming Contest (SEERC) 2017

A: Concerts题目大意有 26 种演唱会,John 希望按照某个顺序看某些类型的演唱会,但是看完某种类型的演唱会后需要至少休息一定的天数才能继续看演唱会,问有多少种看演唱会的方案题解简单的 dp,但是 CodeForces 上的数据范围是假的。。花了好些时间检查为什么 RE。。#include <bits/stdc++.h>using namespace std;...

2018-10-25 17:50:20 392

原创 Ural Championship 2010

B: Transsib题目大意现在有一个线性规划:max⁡z=x1+x2+x3+x4s.t.{x1+x4≤k1x1+x3≤k2x3+x4≤k3x2+x3≤k4x2+x4≤k5x1+x2≤k6\max z=x_1+x_2+x_3+x_4\\s.t.\begin{cases}x_1+x_4\leq k_1 \\x_1+x_3\leq k_2 \\x_3+x_4\leq k_3 \\...

2018-10-22 01:57:19 282

转载 高精度模板

这个只是模板。const int power = 4; // power = log10(base)const int base = 10000;#define MAXL 1001char a[MAXL], b[MAXL];struct num { int l; int a[MAXL]; num() { memset(a, 0, sizeof ...

2018-10-13 10:48:49 317

原创 URAL 1833|Hopes of Rowing|最小割

题目大意现在有 n 个点,每个点需要给一个权值。有 m 条边,每条边需要满足两端点的权值和至少为 k,问一种权值方案使得所有点的权值和最小。题解其实这道题用 KM,用 Hungary 都能做。这里只提提最小割的做法。现在有一个结论:每个点的权值只有 3 种取值:0,k2,k0,\frac{k}{2},k0,2k​,k。显然如果某个点的相邻的点很多,而且至少有 2 个这中没有其他的相邻点的点...

2018-10-05 12:32:26 479 1

原创 简单的多周期MIPS I CPU设计(六)—— 流水线

上一篇:寄存器重命名 下一篇:分支预测单周期CPU问题早期的RISC CPU采用了简单的单周期执行模式,也就是说每个时钟周期只执行一条指令。这样做的好处是设计简单:CPU只需要一条一条指令执行,在上一条指令完全执行完成之后再执行下一条指令。如果从软件设计的角度来看这个设计的话,也就是单线程程序了。我们在设计单线程程序时只需要考虑指令间的逻辑顺序就可以了。相对地,我们在设计多线程程序时就需...

2018-06-27 14:03:51 10548

原创 简单的多周期MIPS I CPU设计(五)—— UART数据通道

上一篇:寄存器重命名 下一篇:流水线UART被用于硬件之间的数据交互,我们要是用的学习板Basys3上 已经搭载了FT2232芯片将USB数据信号转换为UART的TxD和RxD端 信号。我将利用UART将程序从电脑上下载到Basys3板,并使得我 们烧到板上的CPU加载指令并执行,且将执行的结果传输回电脑。数据格式为了数据的传输,我们需要预先规定数据传输协议。同时规定数据 传...

2018-06-27 01:36:08 1203

原创 简单的多周期MIPS I CPU设计(四)—— 寄存器重命名

上一篇:主存· 下一篇:流水线原理寄存器重命名法将原来的32个寄存器映射到两组寄存器,分别是标准规定的32个寄存器,我们称作虚拟寄存器或者架构寄存器和CPU内置的物理寄存器。我们建立虚拟寄存器到物理寄存器的映射关系,并将数据(指令产生的结果)存放于CPU内置的物理寄存器。这样一来我们在解码阶段将会得到虚拟寄存器的地址,并根据这个地址找到物理寄存器的地址并进行操作。实现为了实现映射...

2018-06-27 01:24:30 2205

原创 简单的多周期MIPS I CPU设计(三)—— 主存

上一篇:阶段 下一篇:流水线内存内存分为SRAM和DRAM两大类,均为阵列式,由于Vivado已经提供了Block Memory Generator,这里就不对内存做过多介绍了。Vivado的BMG的读写操作都要延迟到第3个周期才完成。\subsection{缓存}我们知道,内存读取数据的速度是比较慢的(因为大容量的DRAM内部使用电容存储数据),而CPU执行指令的速度是比较快的...

2018-06-27 00:49:46 2201

原创 简单的多周期MIPS I CPU设计(二)—— 指令执行阶段

上一篇:综述 下一篇:主存通常我们将RISC CPU的指令的执行过程分为5个步骤,分别是取指令(IF)、解码(ID)、执行(EX)、内存读写(MEM)、寄存器写(WB)。我们要实现CPU,可以将5个步骤做成5个子模块分别设计,这样可以大大降低我们的开发复杂度。取指令(IF)CPU在取指令阶段(IF阶段)时,先向一级指令缓存要指令,要到指令后我们将程序计数器(PC)自增1(1表示移动一...

2018-06-26 23:52:21 8063

原创 简单的多周期MIPS I CPU设计(一)—— 综述

目录新系列~为了准备数电期末作品而开的新坑~本系列文章将介绍我的MIPS I CPU的实现,我们先规定我们的路线图:MIPS I中的R型、I型、J型指令,暂不支持syscall和break指令流水线寄存器重编号有一级指令缓存以及一级数据缓存支持数据联络(通过UART与电脑传输数据)待以后实现的:整数乘除法流水线浮点处理单元与闪存的交互异常处理器分支预测值...

2018-06-25 13:27:46 4489 1

原创 计蒜客 26985 26986 26987 | 阿里巴巴的手机代理商 | 可持久化Trie

题目链接: https://nanti.jisuanke.com/t/26987题目大意实现一个程序,支持添加字符串,删除以某串为后缀的字符串,修改以某串为后缀的字符串为另一个后缀,查询以某串为后缀的字符串的个数,查询某个版本时以某串为后缀的字符串的个数。题解处理后缀的问题我们翻转字符串就变成处理前缀了。显然我们需要可持久化Trie实现。本篇只是贴板子。由于题目保证所有插...

2018-05-17 10:34:46 197

原创 GDCPC 2018

原题选手或成最大赢家。A: Chika’s Math Homework题目大意1≤T≤105,1≤n≤10181≤T≤105,1≤n≤10181\leq T\leq 10^5, 1\leq n \leq 10^{18},求 ∑i=0ni2Cin∑i=0ni2Cni \sum_{i=0}^n i^2C_n^i 题解比赛的时候队友打表找规律大师秒杀。。太强大了。 可...

2018-05-08 13:50:15 1261

原创 2017 ACM-ICPC Hua-Lien Regional

A: Smooth Sequences如果一个序列是光滑的仅当相邻元素差的绝对值不超过d。称一个序列是半光滑的仅当修改至多一个元素使得序列变得光滑。给定序列询问是否光滑。题解半光滑的有3种情况,一种是连续两端差均不满足d,这种判断两端点差不超过2d即可,一种是一端的差不满足d,随便改,一种是中间某段不满足d,判断修改左右端点即可。#include <bits/stdc...

2018-05-01 17:24:05 1134 1

原创 2017 ACM ICPC East Central North America Regional Contest

手速场。。就不放队友的代码了。A: Abstract Art题目大意给定多个多边形,求面积并。题解模板题。B: Craters题目大意给定多个圆,求这些圆的凸包周长。题解一个圆最多引出两条切线,计算切线注意一些情况就好了。 不过我的做法是暴力将圆拆成3000个点,然后暴力求背包。#include <bits/stdc+...

2018-04-21 23:25:06 921

原创 简单的C语言解释运行器实现(六)—— 生成指令

上一篇:语义分析执行指令在我们有了带类型的语法树后,我们就可以生成指令了。如果你有读过Java虚拟机规范的话,可以看到庞大的JVM指令集,好像是近200条?接下来我们要考虑代码的执行过程并生成指令。首先我们考虑代码的执行过程,我们知道程序运行是基于栈的,那么具体是怎么运行的呢?开篇我们提到了这样的一个语法树: S /|\ F = E | /|\ i F + ...

2018-04-01 19:26:18 1975

原创 简单的C语言解释运行器实现(五)—— 语义分析

上一篇:语法分析 下一篇:生成指令我们在语义分析阶段完成语法树节点类型的推导,并完成数组维度常量表达式的计算以及数组访问的修改。定义类型首先我们需要明确有哪些类型,我们简化的C语言只有如下类型:int, char, short, bool, long, double, float, void, pointer。还可以通过组合组合出很多类型出来,比如多维的指针,多维的数组关于类...

2018-04-01 11:31:33 7675 2

原创 简单的C语言解释运行器实现(四)—— 语法分析

上一篇:定义语法 下一篇:语义分析语法树是啥在知道了文法的定义后,我们就要根据文法分析生成语法树了。语法树可以表达是文法展开的过程,比如i+i*i 对应文法是E ::= T | E + T | E - TT ::= F | T * F | T / FF ::= i文法展开过程是:E -> E + T -> T + T -> F + ...

2018-04-01 00:36:33 10122

原创 2017 ACM ICPC Asia Regional - Daejeon Programming Constest

A: Broadcast Stations题目大意给定一棵树,选一些节点iii,赋予P(i)P(i)P(i)表示节点能覆盖到距离不超过P(i)P(i)P(i)的所有点,如果P(i)=0P(i)=0P(i)=0,不能覆盖本身,问min∑P(i)min∑P(i)\min \sum P(i)。题解树形DP。B: Connect3题目大意有一个4*4的竖着放的板,每次可...

2018-03-31 20:59:40 1597 1

原创 简单的C语言解释运行器实现(三)—— 定义语法

好的,词法分析就结束了,我们开始语法分析吧。首先为了简化问题,我们对C语言作出如下限制: 1. 没有switch语句 2. 不支持函数指针 3. 没有结构体、联合体 4. 以及一些其他的语句预处理器将在第七篇中讲到。编译阶段将不会有预处理指令(#include等)。我们要处理的语法将在下面列出。文法定义文法首先我们定义一条文法是这样的:NAME ::= ...

2018-03-31 11:22:19 1735

原创 简单的C语言解释运行器实现(一)—— 词法分析

引入编译器的构造想必度过编译原理的同学已经了解了。大概分为 预处理器 -> 编译器 -> 汇编器 -> 链接器,4个阶段。 编译器又可以分为词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 ->生成目标代码等阶段。 阶段 功能 预处理器 处理宏定义,如#include表示引入其他源文件...

2018-03-31 10:40:53 2034

原创 Petrozavodsk Summer 2017 JOI TST 2012 Selection | Kangaroo | 动态规划

G: Kangaroo题目大意有n(1≤n≤300)n(1≤n≤300)n(1\leq n\leq 300)只袋鼠,每个袋鼠大小为aiaia_i,袋子大小为bibib_i。袋鼠袋鼠至多装1只袋鼠,且满足被装袋鼠的大小小于袋子的大小。一个装袋鼠的合法方案指的是不存在一只袋鼠可以装进其他袋鼠的袋子里。问有多少种装袋鼠的方法。题解令fi,j,kfi,j,kf_{i,j,k}表示对...

2018-03-28 20:20:42 667

原创 Petrozavodsk Summer Training Camp 2017, Warsaw U Contest

C: Painting题目大意你有数字1~n,对于每个数字i,用且仅用一次刷子将某个区间修改为i。每次刷子的代价为区间长度。总代价最大是多少? 比如刷后的数列是2 1 2 3,那么可以:[1,4]=3,[1,3]=2,[2,2]=1。总共代价为8是最大的。题解首先我们可以搞出区间的包含关系,那么对于被一个区间包含的一些区间,如果不和其他子区间邻接,那么就只能修改这个子区间,否则若...

2018-03-19 00:22:15 628

原创 Petrozavodsk Winter-2018. Carnegie Mellon U Contest

D: Octagons题目大意八边形网格中,每个点连出的3条边分别标号a,b,c,一个八边形内的8条边最多2种标号,问给定一个经过边的标号序列,判断是否是一个闭合的环。题解我们可以发现,如果要成为一个闭合的环,至少会经过一个8边形上连续的5条边。比如abababab的八边形,必会经过ababa或者babab,这样等效于经过剩下的连续的三条边bab或者aba(对应)。这样可以...

2018-03-18 23:19:27 498

原创 CodeForces Gym 101221 | 2014 World Finals | A Baggage | K Surveillance

A: Baggage题目大意一开始坐标[−2n+1..2n][−2n+1..2n][-2n+1..2n]中,[1..2n][1..2n][1..2n]按顺序放BABABA...BA,一共nnn个BA,坐标[−2n+1,0][−2n+1,0][-2n+1,0]是空的。每次可以移动连续2个字母到空的位置上,问最少多少步操作可以使得最后的序列变成AA..ABB..B(位置不一定要在[1..n][...

2018-03-11 21:00:21 575

原创 CodeForces Gym 101208 | 2013 World-Finals (需补坑)

感觉自己被虐千百遍,看着final的队伍做题速度++++很难受。 最后只做了6题。A: Self-Assembly题目大意C: Surely You Congest题目大意给出一个无向有权图,已知每个点会有一些汽车,这些汽车需要到1号点,汽车只会走最短路,每条路同时只能有一辆汽车从一个方向进入(也就是说不同时候是可以进入的,不同方向互不影响),车的速度一定,问有几...

2018-03-11 20:28:11 222

原创 CodeForces Gym 101611| Moscow Subregional of Northern Eurasia Programming Contest, ICPC 2017-2018

A: Advertising Strategy题目大意题解#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;int main() { ll n, k; scanf("%lld%lld", &n, &k);...

2018-03-10 19:01:31 895

原创 Codeforces Gym 101612 | 2017-2018 NEERC St Petersburg Subregional

居然这套题要文件输入输出。。A: Auxiliary Project题目大意Anna的机器可以显示最多n条灯条,问显示n条灯条能表示的数字的和最大是多少。题解因为n不大,所以完全背包即可。#include <cstdio>#include <algorithm>using namespace std;const int s[]...

2018-02-28 11:36:49 651

原创 实现简单的学生选课信息管理系统

中山大学软件工程程序设计I 大作业。要求本系统模拟实现学生课程信息管理系统,其中包括学生信息,课程信息以及学生的选课信息(储存在文本文件当中),其中功能包括三部分:学生相关功能添加学生信息到学生信息文件当中,学生信息包括:学号(stuId),姓名(stuName),性别(stuSex)删除学生信息改变学生信息查看学生信息课程相关功能添加课程信息到课程信息文件中,课程信息包括:课程编号(c

2018-01-04 20:33:13 16160 5

原创 设计简单的贪吃蛇AI

前言接着上一篇设计简单的贪吃蛇。本博客的目标是写出一个通过几率比较大的贪吃蛇AI。代码重构由于设计AI什么的代码我自己不太会用C写出较为易写的代码,这篇博客的源代码采用C++实现,重构了上一篇简单的贪吃蛇的C代码。 新重构后的代码有4个部分:Game类表示地图和一小部分逻辑,Snake类表示蛇和一小部分逻辑,SnakeAI类表示贪吃蛇AI,剩下的一些函数是关于操作系统兼容的代码。Game类Game

2017-12-24 17:06:32 1574

信息学竞赛离线评测软件

最受欢迎的信息学竞赛离线评测软件,需要提供输入输出文件,该软件将可以自动帮您运行程序(需要源代码),并输出得分。

2011-07-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除