
假期练习
迷亭1213
帅帅帅
-
原创 Codeforces Round #628 (Div. 2)
A. EhAb AnD gCd题意简述给定 x,要求一对数 a ,b, 使得 GCD(a ,b) + LCM( a, b) = x,其中 GCD 表示求最大公约数, LCM 表示求最小公倍数。解题思路只需要分为 1 和 x-1 即可。代码示例#include<bits/stdc++.h>using namespace std;int t,x;int main(){ ...2020-03-21 16:12:1498
0
-
原创 USACO 2017 January Contest, Silver
USACO 2017 January Contest, SilverProblem 1. Cow Dance Show题意描述经过几个月的排练,奶牛们基本准备好展出她们的年度舞蹈表演。今年她们要表演的是著名的奶牛芭蕾——“cowpelia”。表演唯一有待决定的是舞台的尺寸。一个大小为 K 的舞台可以支持 K 头牛同时在舞台上跳舞。在牛群中的 N 头牛(1<= N <=10,00...2020-02-29 15:49:56261
0
-
原创 CTU Open Contest 2019补题
本次比赛题目按照通过人数升序依次为:A B F C G J H E I D。测试地址:计蒜客官方数据、题面、题解文章目录A. Beer BarrelsB. Beer BillC. Beer CoastersD. Beer FloodE. Beer GameF. Beer MarathonG. Beer MugsH. Screamers in the StormI. SixpackJ. Bee...2020-02-24 13:17:22324
0
-
原创 2020 CCPC Wannafly Winter Camp Day6 部分题解
测试地址:牛客竞赛C 酒馆战棋题意简述了解炉石传说的应该不难理解题意。太长了还是去看原题面吧/解题思路模拟题,需要注意我方随从是从左到右依次进攻的,若忽略这点会浪费很多时间。Code队友的代码:#include <cstdio>#include <algorithm>#include <cstring>#include <string...2020-02-01 19:41:08475
0
-
原创 2020 CCPC Wannafly Winter Camp Day5 部分题解
A Alternative Accounts题意简述一共有 n 个账号,k (k <= 3) 场比赛,一个人可能拥有多个账号,但是一个人不会用多个账号参加同一场比赛。给定 k 场比赛的参与账号,请问这 n 个账号最少属于多少人。解题思路k 只有 3 种情况,1,2,3。当 k = 1 时,有多少账号参赛,就最少有多少人。当 k = 2 时,每一个账号可能参与:0 场比赛,1 场...2020-01-31 17:59:29599
0
-
原创 Educational Codeforces Round 81 (Rated for Div. 2)
A. Display The Number题意简述众所周知 7 根数码管可以用于表示数字 0~9 ,现在给 n 根数码管,请问能表示的最大的数是多少?解题思路显然位数越大的数越大,相同位数时,高位大的数越大。那么最少用 2 根数码管能表示一个数字,即 1,所以我们尽量多的表示 1,可以表示 n/2 个1,如果 n 为奇数,那么剩下的 1 个数码管可以和最高位表示出 7,因此我们只需对 n ...2020-01-30 15:15:09331
0
-
原创 树形动态规划题集
测试地址部分题面可能复制有问题,图片没有复制,有疑惑见原题面。1575:【例 1】二叉苹果树问题描述有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共 N 个节点,标号 1 至 N,树根编号一定为 1。我们用一根树枝两端连接的节点编号描述一根树枝的位置。一棵有四根树枝的苹果树,因为树枝太多了,需要剪枝。但是一些树枝上长有苹果,给定需要保留的树枝数量,求最多...2020-01-10 13:00:54536
1
-
原创 区间类动态规划题集
测试地址本文题面皆是复制网页,如果有格式问题参考原题面。1569:【 例 1】石子合并题意描述将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数 n 及每堆的石子数,并进行如下计算:1、选择一种合并石子的方案,使得做 n−1 次合并得分总和最大。2、选择一种合并石子的方案,...2020-01-06 22:24:17399
1
-
原创 割点和桥题集
分离的路径(rpaths)题意描述为了从 F个草场中的一个走到另一个,贝茜和她的同伴们不得不路过一些她们讨厌的可怕的树。奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分离的路径,这样她们就有多一些选择。每对草场之间已经有至少一条路径,给出所有 R条双向路的描述,每条路连接了两个不同的草场,请计算最少的新建道路的数量。路径由若干道路首尾相连而成,两...2020-01-05 17:39:05182
0
-
原创 2-SAT问题
2-SAT问题问题的提出有 N 个变量,每个变量只能有两种可能的取值。再给定 M 个条件,每个条件都是对这两个变量的取值限制。求是否存在对 N 个变量的合法赋值,使 M 个条件均得到满足。这个问题被称为 2-SAT (satisfiability)问题。一般形式设一个变量 Ai(1 <= i <= N)的取值可能是 0 或者 1,或者称 p 或 q。那么 2-SAT 问题中 M...2020-01-04 18:12:42262
0
-
原创 强连通分量题集
一本通OJ灵动OJA.受欢迎的牛(popular)题意描述原题来自:USACO 2003 Fall每一头牛的愿望就是变成一头最受欢迎的牛。现在有 N 头牛,给你 M 对整数 (A,B),表示牛 A 认为牛 B 受欢迎。这种关系是具有传递性的,如果 A 认为 B 受欢迎,B 认为 C 受欢迎,那么牛 A 也认为牛 C 受欢迎。你的任务是求出有多少头牛被除自己之外的所有牛认为是受欢迎的。解...2020-01-04 16:34:46365
0
-
原创 POJ2528 计算可见线段(线段树)
原题链接:POJ2528解析:这题考察的是线段树子区间更新的维护中的计算可见线段。用离散化,排序去重,但是这题广告是一块瓷砖一块瓷砖贴的,也就是说有可能离散化之后,明明俩个相邻点之前有空白,但是由于离散化分配序号是紧挨着的,就造成了俩块有广告瓷砖紧挨。举个例子,比如四号瓷砖(以下用号简称)和五号都有广告,那么离散化之后四号序号为1,五号为2,他们之间没别的位置,故全覆盖,那如果四号和六号有...2018-08-25 19:42:258702
0
-
原创 POJ 4001 xiangqi(模拟)
原题链接:题意简述:黑方只有一个棋子,将。红方有四种棋子,现在红方已走一步,轮到黑方走了,请问黑方是否必败。解题思路:黑方最多有四种走法,分别判断这四个位置上黑方是否会输,如果全都会输,则必败。错误报告:这题需要注意不能用%c或者getchar()读入,因为数据似乎不标准,这样读会出错,保险的做法是将字符当作字符串读入。另外只需要考虑全面一点,就可以了,要仔细一点。代码示例:...2019-01-24 13:57:17372
0
-
原创 HDOJ5015 233 Matrix(矩阵乘法加速递推)
原题链接:HDOJ5015题意简述:给定矩阵每个元素计算公式,求下标为(m,m)的元素的值。解题思路:刚开始想着递推求出整个矩阵,后来我哭了。m 可达1e9,要化简到 lg 级别才能不超时,这时我隐约想到用转移矩阵加快速幂做了,根据《算法竞赛进阶指南》P151页所述,如果一类问题具有如下特点:可以抽象出一个长度为n的一维向量,该向量在每个单位时间发生一次变化 变化的形式是一个线性递推...2019-01-16 15:12:27479
0
-
原创 TVYJ1061 解题报告(线性DP)
题意简述:一个公司有三个移动服务员。如果某个地方有一个请求,某个员工必须赶到那个地方去(那个地方没有其他员工),某一时刻只有一个员工能移动。被请求后,他才能移动,不允许在同样的位置出现两个员工。从p到q移动一个员工,需要花费c(p,q)。这个函数没有必要对称,但是c(p,p)=0。公司必须满足所有的请求。目标是最小化公司花费。输入格式:第一行有两个整数L,N(3<=L<=200, ...2019-02-18 13:11:17296
0
-
原创 NOIP2008 传纸条(线性DP)
题目描述:小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的...2019-02-18 17:50:00311
0
-
原创 洛谷P1020/NOIP1999 拦截导弹
题意简述:求最长不上升子序列的长度,并求出最少有几个不上升子序列。解题思路:第一问直接用dp做,有O(n^2)的也有优化后O(nlgn)的,我才用的是前者。第二问可以用一个数组h来记录当前所有系统的拦截高度,每次遇到一个新元素,在h数组中找一个大于 a[i] 的最小的元素,并将其更新为 h[ j ] = a[i],如果没有则将a[i]作为新元素添加进h数组。代码示例:#include...2019-02-19 11:37:23456
0
-
原创 例题6:挖地雷(递归解法)
题意简述:给出一张有向无环图,以及每个节点的权值,求出一条权值和最大的路径(起点任意)。解题思路:这题满足无后效性与最优化原则,可以使用动态规划,但我情不自禁的就写成了深搜+记忆化,不过本质上相同嘛。代码很短,逻辑也很清晰,就是普普通通的dfs+记忆化。代码示例:#include<iostream>#include<cstdio>#include<v...2019-02-19 12:12:39758
0
-
原创 洛谷P1091 合唱队形(dp)
题意简述:给一个序列,求最少去掉几个元素才能使得序列呈先上升后下降。解题思路:设f1[ i ] 为以第 i 个元素为尾的最长上升子序列,f2[ i ]为以第 i 个元素为起点的最长下降子序列,于是答案就是最小的 n - f1[ i ] - f2[ i ] + 1;代码示例:#include<iostream>#include<cstdio>using na...2019-02-19 15:08:48313
0
-
原创 “字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛——解题报告
前言:Easy:A B C GMedium:H JHard:D E F I2019-03-22 19:45:54257
0
-
原创 2019矿大icpc夏令营Day4-求解Ad Hoc类问题
求解AD Hoc类问题的编程实验(拉丁语)Ad Hoc:为某种目的而特别设计的。在程序设计竞赛的试题中,有这样一类试题,解题不能套用现成的算法,也没有模式化的求解方法,而是需要编程者自己设计算法来解答试题,这类试题被称作Ad Hoc类试题,也被称为杂题。实现的程序一般比较简短。求解Ad Hoc类问题的两类方法:机理分析法:采用顺向思维,从分析机理内部出发顺推算法。统计分析法:采用逆向思...2019-08-04 16:33:3271
0
-
原创 2019矿大icpc夏令营Day3-数论
数论的编程实验之前曾好几次学过数论,但是其中各种证明方法以及理论仍然是转眼间就忘。借着这次机会,要把模板以及常用的定理以及推论给掌握。今天讲的高斯素数、梅森素数都是第一次听说,回头要重新写一篇笔记详细学习一下。还有将正整数快速分解成质因数的Pollard_rho算法还没有掌握,也要写一篇笔记学习并整理。求解不定方程和同余方程计算最大公约数和不定方程计算同余方程和同余方程组计算多项式同余...2019-08-04 16:34:0790
0
-
原创 2019矿大icpc夏令营Day2-动态规划
动态规划方法的编程实验本次课程主要介绍了动态规划中的阶段、状态、决策、决策的指导思想。动态规划中需要重点理解的知识点有:阶段与状态、决策与允许决策的集合、状态转移和最优化概念。在此基础上,动态规划的一些经典模型也是需要掌握的,今天练习了如下模型:子集和问题最长公共子序列问题背包问题在实际问题中,状态与阶段往往是不同的,需要具体问题具体分析;同样的,同一个问题模型也可以有几种不同的阶...2019-08-04 16:34:4257
0
-
原创 2019矿大icpc夏令营day1-贪心算法
贪心算法编程实验总结今天的贪心算法,主要介绍了三类经典的贪心问题:背包问题任务调度问题区间调度问题在解决上述三种类型的问题时,首要解决的是如何选取局部最优解,即如何才能使得局部最优解推出全局最优解。类似于动态规划中的阶段划分、状态选取以及最重要的设计状态转移方程,贪心算法中也要划分阶段以及设计合理的贪心策略 。背包问题ZOJ2109 FatMouse’ Trade解题思路:...2019-08-04 16:35:30133
0
-
原创 1006 Fansblog解题报告
1006 Fansblog题意简述:给定一个大素数P,请找出它的前一个素数Q,并求出Q! mod P的值,其中1e9 <P,Q< 1e14。解题思路:首先我们需要快速的找出素数Q,当然这么大的范围线性筛是肯定解决不了的,O(N)O(\sqrt{N})O(N) 也是解决不了的,因此我们得采用Miller-Rabin素性测试 算法。该算法是O(klog3Q)O(klog^3Q)...2019-08-04 16:37:3651
0
-
原创 UVa10375 选择与除法(唯一分解定理)
原题链接:UVa10375解析:其中primes是前1000个素数,e数组存放每个素数对应的指数。代码实例:#include<iostream>#include<cstring>#include<cmath>#include<cstdio>using namespace std;int primes[1005];int e[...2018-08-04 15:31:53120
0
-
原创 POJ3468 线段树求和(线段树模板2)
原题链接:POJ3468解析:本题也是线段树的一种用法,算得上裸题,我用这题来加深对线段树的理解,以及熟悉线段树的模板。郭炜老师的代码是演示指针写法,但我更喜欢用数组来表示,所以改成了我喜欢的模板。PS:刚刚刚刚刚才知道,这种方法是延迟标记,也就是说当对一端区间的叶子结点进行相同操作的时候,不要急着全部完成,不然递归等操作需要很多,我们可以记录对这个区间将要做什么操作,等查询的时候将所有对...2018-08-25 10:45:118831
0
-
原创 POJ3264 线段树模板
原题链接:POJ3264解析:我拿本题来熟悉线段树模板的,这个应该算是裸题了。代码示例:#include<iostream>#include<cstdio>using namespace std;const int INF = 2e9;int minV = INF;int maxV = -INF;struct CNode{ int l,r; i...2018-08-25 08:54:248578
0
-
原创 UVa1635 无关的元素(二项式定理)
解析:若想m是a的倍数,那么将m和a按照唯一分解定理分解为素数相乘,a对应素数的指数一定要大于等于m对应素数的指数。其中e是对应p的素数的指数,根据递推式,每次与(n - k + 1)/ k 相乘,改变了对应的指数,故用e表示不同系数的对应位置上素数的指数。代码实例:P320#include<cmath>#include<iostream>#include&l...2018-08-05 13:24:12147
0
-
原创 UVa1637 Double Patience
原题链接:UVa1637解析:一开始用的是深搜,但是超时了,明显我没计算好时间。然后尝试用记忆化处理,但是状态我却没法表示,事实上用map<vector<int>,double> d 可以把数组当作一个状态来表示是否已经搜索过。那么这个d的第二个位置表示的就是当前状态成功率,如果不能成功呢,就存储0(也就是当前状态不能再消掉牌),如果所有牌都消掉了呢,就返回1,(百分百...2018-08-09 15:34:35100
0
-
原创 UVa11181 条件概率
原题链接:UVa11181解析:求每个人实际买了东西的概率,就是求第i个人买了东西的情况下有r个人买了东西。设有r个人买东西为事件E,第i个人买东西为事件Ei。那么要求的就是p( Ei E ) = p( E * Ei) / p( E )。代码实例:#include<cstdio>#include<cstring>const int maxn = 20 +...2018-08-09 10:50:3184
0
-
原创 UVa10491 Cows ans Cars
原题链接:UVa10491解析:一定要读懂题意,尤其是英文。刚开始以为主持人每打开一个门,就换一次,然后才发现是一次性打开c个门再问你换不换。代码实例:#include<iostream>#include<cstdio>using namespace std;int main(){ int a,b,c; while(cin >> a &...2018-08-09 09:58:0157
0
-
原创 UVa1636 决斗
原题链接:UVa1636解析:直接扣一枪没弹的概率是所有子串总00的个数与00+01个数的比值,也就是00与0个数的比值。转一圈再扣,概率是0的个数比上0+1的个数,即0与字符串长度比值。代码实例:#include<cstdio>#include<cstring>int main() { char s[120]; while(scanf("%s",...2018-08-09 09:24:49138
0
-
原创 UVa10791 Minimum Sum LCM(唯一分解定理)
原题链接:UVa10791解析:给出n,可以由唯一分解定理把n分解为若干素数相乘的形式(n = a1^p1*a2^p2*...)。由于任意一个数都可以分解成上述形式,所以最小公倍数为n的一些数分解出来的每个素数的指数一定不大于n对应素数的指数。每个a^p单独作为一个整数时和最小。代码实例:#include<iostream>#include<cmath>#...2018-08-04 16:46:145599
0
-
原创 暑假练习:uva11400(最长上升子序列)
题目链接:uva11400解析:这题的题意比较难理解,题目给出每种灯泡的电压v,电源费用k,灯泡的费用c,灯泡数量l。那么其中一种灯泡需要花的钱d[i] = l[i] * c[i] + k[i]。现在要求求出最少费用,那问题就变成了:是前i种灯泡全用灯泡i省钱,还是前i种灯泡中选不同种灯泡省钱。状态d[i]就代表了前i种灯泡中最小费用,转移方程就是min{ d[j] + (s[i] - s[j...2018-07-22 08:41:3593
0
-
原创 暑假练习:uva12563(01背包问题)
原题链接:uva12563解析: 这题我花了十几分钟就敲出来了,但是没通过,于是改了俩个多小时才发现少打了max....。 这题是典型的01背包问题,其中时间可以看作背包容量,每首歌就可以看作体积了,那么重量就是1。本题要求唱最多的歌的同时要尽可能唱的时间久一点。那d(i,j)表示在前i首歌中,剩余时间为t时的最多唱歌数。但是要注意的是,题目还要求输出唱歌的...2018-07-21 19:14:11197
0
-
原创 递推式计算与矩阵乘法 C++
以斐波那契数列为例,计算斐波那契数列的矩阵方法代码如下:(快速幂、矩阵乘法)《挑战程序设计竞赛第二版》P199#include<iostream>#include<vector>using namespace std;typedef vector<int> vec;typedef vector<vec> mat;int M = 1...2018-07-29 20:22:32356
0
-
原创 暑假练习:Uva437
题目链接:uva437解题思路:只有长和宽均小于下面立方体的长和宽的方块才可以放在上面。因此这是一个有序对,可以抽象成有向无环图来做。运用DAG求最长路算法来求。其中用dp[i][j]来表示第i种方块以第j种边为高时的最高高度。代码实例:#include<iostream>#include<cstring>using namespace std;stru...2018-07-20 18:07:1460
0
-
原创 暑假练习:上学
个人笔记,仅供复习上学【题意描述】小喵喵家附近有n个路口,m条道路连接着这些路口,而且通过这些道路各自需要一些时间c[i]。小喵喵在1号路口,他要去n号路口上学,但是他马上要迟到了,所以他想知道最短需要多长时间能够到达学校。其中忽略小喵喵由于出家门、到n号路口之后进入学校、从一条道路移动到另一条道路之类的时间,只计算他在这些道路上花费的时间总和。除此之外,小喵喵还有k个时间暂停器,每个可以...2018-07-20 10:04:45135
0
-
原创 动态规划:铺砖问题
问题描述:给定n*m的格子,每个格子被染成了黑色或者白色。现在要用1*2的砖块覆盖这些格子,要求块与块之间互相不重叠,且覆盖了所有白色的格子,但不覆盖任意一个黑色格子。求一共有多少种覆盖方法,输出方案数对M取余后的结果。限制条件:1 <= n <= 15 1 <= m <= 15 2 <= M <= 10^9样例输入:n = 3m = 3...2018-07-28 11:18:323421
0