08 2018 档案
摘要:题意是将 1 展开成 01 ,将 0 展开成 10 ,问这样展开 n 次后序列中有多少对 0。 手写发现:0,1,1,3,5,11 ... 即 a[ i ] = a[ i -1 ] + a[ i - 2 ] * 2; 由题意知 n 能到 1000,大于 2^1000 ,用 string 存。模拟加法
阅读全文
摘要:题意是检查一个字符串是否满足三个条件: 一、至少有一个元音字母。二、不能出现三个连续的元音或三个连续的辅音。三、除了 ee 和 oo 外不能出现两个连续相同字母。 若三个条件都能满足,该字符串满足条件,有一个条件不满足则该字符串不满足条件。 但是这道题的数据......一定有元音字母,长度一定不少于
阅读全文
摘要:题意是已知车轮的直径,圈数和时间,求所行驶的里程和速度。 单位换算,代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 const double pi = 3.1415927; 4 double d,t,s,v; 5 int c,cnt
阅读全文
摘要:题意是要穿过一个迷宫并且将每一步打印出来。 用宽搜的方法找到路径,在 vis 中存一下方向,只是这题被看到的一种不太对的运算符重载坑了很久...... 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn =
阅读全文
摘要:题意是求 n 个数在全排列中的第 m 个序列。 直接用 stl 中的 next_permutation(a, a+n) (这个函数是求一段序列的下一个序列的) 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[1005];
阅读全文
摘要:题意是对水果的产地和种类进行统计再按格式输出。 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 struct node 4 { 5 char name[20],place[20]; 6 int num; 7 }f[105]; 8 b
阅读全文
摘要:与 HDU 1028 相似的题目。 方法一:完全背包。 限制条件:硬币总值不超过 n。 目标:求出组合种数。 令 dp[ i ][ j ] == x 表示用前 i 种硬币组合价值为 j 的钱共 x 种方法。 状态转移方程:dp[ i ][ j ] = dp[ i - 1][ j ] + dp[ i
阅读全文
摘要:题意是求所给的数能够被拆分成的不同组合数目。 方法有三种: 一、完全背包。 限制条件:所用数字不大于 n。 目标:求分解种数(组合出 n 的方法数)。 令 dp[ i ][ j ] = x 表示 用前 i 种数字组合出数字 j 有 x 种方法。 状态转移方程:dp[ i ][ j ] = dp[ i
阅读全文
摘要:题意是求出跑了 n 圈每圈 m km 的个人的平均速度。 控制格式,特别注意,题意是输出 -:--:-- 的该人成绩作废,但要把他其他的成绩输进去,不能直接就 break ,输出也就只有一个 - ,而不是与作废圈数相等的 - 。 代码如下: 1 #include <bits/stdc++.h> 2
阅读全文
摘要:题意是给定初始位置在一个迷宫中按照要求前进,判断多少步能离开迷宫或者多少步会走入一个长达多少步的循环。 按要求模拟前进的位置,对每一步在 vis[ ] 数组中进行已走步数的记录,走出去或走到已走过的位置结束,计算出所要求的步数即可。 要注意的一点是记得 scanf 在 %c 的时候会读入空格和换行的
阅读全文
摘要:题意是有 n 个人要对 m 件服装打分,按总分从高到低排序,再将总分排在前 k 名的服装按编号的从高到低输出,结构体排序。 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 struct shirt 4 { 5 int num; 6
阅读全文
摘要:题意是说有一点从(300,410)的位置出发,向右移动到(310,410)后开始转向,A 表示向顺时针转,V 表示向逆时针转,每次转向后沿当前方向前进 10 个单位, 输出其坐标,再补充一点格式上的东西即可。 如果当前要向顺时针转,那么转过之后的方向依然无法确定其绝对的上下左右,每次转向后的方向还与
阅读全文
摘要:题意是在二维平面上在一些位置上进行数据的增删改查操作,使用树状数组(了解树状数组点这里) 原来的树状数组在求区间和时是 sum( x, y ) = getsum( y ) - getsum( x - 1 ), 在这道题中是 sum( x1, y1, x2, y2 ) = getsum( x2,y2
阅读全文
摘要:题意是要在两条平行线间连点,要在线不交叉的前提下尽可能多的连线,问最多能连多少条线。 现假定题中所给的是 9 组点,分别是:1—3,2—8,3—5,4—9,5—2,6—4,7—6,8—7,9—1,如图示: 则将所给的每组 p 和 r 存在数组 a[ ] 中:a[ p ] = r; 问题就转化成了在数
阅读全文
摘要:题意是要在一段数列中求 m 段互不重合的子数列的最大和。 动态规划,用数组 num[ ] 存储所给数列,建二维数组 dp[ ][ ] , dp[ i ][ j ] 表示当选择了第 j 个数字( num [ j ] )时,前 j 个数字被分成 i 组的所得最大和。 那么这个最大和等于 max{ ( 前
阅读全文
摘要:题意是问在给定的三角形数阵中从一个数到另一个数所要跨过的边数。 最初的时候很迷,除了发现每层的数字个数与层数间的关系和每层数最后一个数与层数的关系外什么也没看出来,打算先求出数字所在的层数,然后计算到该层最后一个数要跨过的边数,由于各层最后一个数之间所跨过的边数与层数差有关(称层数距离), 因此可以
阅读全文
摘要:题意是给定 n 和 a,问是否存在正整数 b,c 满足:a^n + b^n == c^n.输出 b c,若不存在满足条件的 b,c,输出 -1 -1。 当 n > 2 时,由费马大定理,不存在正整数 a,b,c 满足 a^n + b^n == c^n ,也就是说当 n 大于 2 时,只能输出 -1
阅读全文
摘要:题意是求一列连续升序的数经过一个栈之后能变成的不同顺序的数目。 开始时依然摸不着头脑,借鉴了别人的博客之后,才知道这是卡特兰数,卡特兰数的计算公式是:a( n ) = ( ( 4*n-2 ) / ( n+1 ) * a( n-1 ) ); 用一个二维数组,a[ i ][ 0 ] 表示第 i 个卡特兰
阅读全文
摘要:题意是给定火车进站的序列和出站的序列,问能否完成转换,若能输出过程。 和另一道以火车进站为背景的栈应用题类似,但增加了对于过程的输出,只需要多记录一下进出站顺序即可。 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 {
阅读全文
摘要:题意是要统计在一段字符串中连续相同的字符,不用再排序,相等但不连续的字符要分开输出,不用合在一起,之前用了桶排序的方法一直 wa,想复杂了。 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 std:
阅读全文
摘要:题意是求一组数的最小公倍数,不用存,每次输入即刻处理即可。 补充一点:两个自然数的最大公约数与它们的最小公倍数的乘积等于这两个数的乘积。 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int gcd(int a,int b) 4
阅读全文
摘要:题意是求 n 的阶乘的位数。 直接求 n 的阶乘再求其位数是不行的,开始时思路很扯淡,想直接用一个数组存每个数阶乘的位数,用变量 tmp 去存 n 与 n - 1 的阶乘的最高位的数的乘积,那么 n 的阶乘的位数就等于 n - 1 的阶乘的位数加 tmp 的位数再减去 1。 但这种做法是不对的,例如
阅读全文
摘要:题意是给定 n,m,问有多少组(a,b)满足 0 < a < b < n 而且 (a ^ 2 + b ^ 2 + m) / ( a * b ) 是整数。 直接模拟即可。 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int mai
阅读全文
摘要:题意是说对一个长度为 n 的数环进行排列,使得相邻两数的和为素数,按从小到大的顺序依次输出。 因为是环,所以总能调整成以 1 为序列首输出。用深度优先搜索的方法即可。在判断素数时由于 n 小于 20,所以两数的和小于 40,则只要手写小于 40 的素数数组即可。 代码如下: 1 #include <
阅读全文
摘要:题意是在一段大写英文字符中找出 5 个字符通过代入公式运算得到目标值,如有多组字符满足题意,则输出字典序最大的一组,否则输出 no solution。 应该是用深搜做的,但是直接暴力也过了……(应该没有比下面更朴实的算法了......) 1 #include <bits/stdc++.h> 2 us
阅读全文
摘要:题意是说从 0 开始每次增加 STEP,然后模 MOD 得到一些数,问是否能得到从 0 到 MOD - 1 的所有数。 只要 STEP 与 MOD 互质就可以满足条件,也就是二者的最大公因数为 1 即可。 但是这道题对于输出的格式要求很高,少见的右对齐(自从发现 cin / cout 比 scanf
阅读全文
摘要:题意是说在长度为 n 的环排列中,按照一定的方向(顺时针或逆时针),后一个数不能仅比前一个数大 1 , n 的下一个数不能是 1 ,问这种长度为 n 且本质不同(本质不同指环上数字的相对位置不同,如 1234 和 2341,3412,4123 都是本质相同的)的环有多少种。 分析样例,使用公式: a
阅读全文
摘要:题意是就是求出 2 的 n 次方。 直接求肯定不行,直接将每一位存在一个数组的各个位置即可,这里先解出 2 的 n 次方的位数,再直接模拟每一位乘以 2 即可得到答案。 求解 2 的 n 次方的位数的方法:len = n * lg(2) (lg(2):以 10 为底 2 的对数) 证明:在判断一个数
阅读全文
摘要:题意是说在一个洞穴中有许多房间,每个房间中有一些虫子和大脑,这些房间之间用隧道相连形成一棵树,士兵们杀虫子的能力有限,也可以直接杀死虫子而不消耗士兵战斗力,但这样就无法得到房间中的大脑,士兵们不能走回头路,问给定士兵数量时能得到的大脑最大值。 在树上进行动态规划,对于每个节点来说,选择了它,就要损失
阅读全文
摘要:题意是求出所给各点中最近点对的距离的一半(背景忽略)。 用分治的思想,先根据各点的横坐标进行排序,以中间的点为界,分别求出左边点集的最小距离和右边点集的最小距离,然后开始合并,分别求左右点集中各点与中间点的距离,从这些距离与点集中的最小距离比较,求得最小距离,此处可按纵坐标排序,将纵坐标距离已经大于
阅读全文
摘要:题意是说求出在一天中时针、分针、秒针之间距离均在 D 度以上的时间占比。 由于三针始终都在转动,所以要分别求出各个针之间的相对角速度,分别求出三针满足角度差的首次时间,再分别求出不满足角度差的最终时间,取这三个时间段的交集,也就是首次时间的最大值和最终时间的最小值之间的部分,要注意剪枝,去掉多余的部
阅读全文
摘要:题意是说有一些人参加了不同级别的班,级别有 lower,middle,upper 三种,级别可以组合,出现比如 lower upper,middle upper 这种级别,级别的比较是从右往左,如果在一组比较中有的人的组合级别多,就以本组中级别最多的作为参照,其他人的级别要在左边添加 middle
阅读全文
摘要:题意是说有四种同学,没有球拍没有球的( a ),只有球拍的( b ),只有球的( c ),既有球拍又有球的( d );现在要去打羽毛球,每个人都可以选择去或者不去,问有多少种无法打羽毛球的情况。 无法打羽毛球的原因可以分成:球不够或球拍不够。 这样分不是很清楚,改成:只是球不够,只是球拍不够,球和球
阅读全文
摘要:题意是说双方各有剪刀,石头和布的卡片各 a,b,c,a‘,b',c' 张,对方是随机选择,问我方的最大预期得分。 这道题目一开始看到的时候感觉没有头绪,再次读题,发现题目说结果可能是分数,如果是分数的话就输出最简分数...... 这时候突然感到奇怪,为什么会有分数呢?加之题目中说到的对方是随机选择,
阅读全文
摘要:题意是说在给定的一种满足每一项等于前两项之和的数列中,判断第 n 项的数字是否为 3 的倍数。 斐波那契数在到第四十多位的时候就会超出 int 存储范围,但是题目问的是是否为 3 的倍数,也就是模 3 值为 0 ,考虑到余数只有0,1,2,而且每项由前两项求和得到,也就是说余数一定会出现循环的规律,
阅读全文
摘要:题意是说在 h 行 w 列的矩阵中,通过设计使得尽可能多的行或列能满足题中的平衡条件。 如果行数(列数)是奇数,那么每一列(行)一定不能平衡,就要按照满足每一行(列)平衡,输出“ () “;若行数和列数同时是奇数,则设计不出任何一行或一列平衡; 当行数和列数同时为偶数时,情况是最复杂的,开始的时候只
阅读全文
摘要:emmmmm..就是矩阵快速幂,直接附代码: 1 #include <cstdio> 2 using namespace std; 3 const int maxn = 100; 4 const int mod = 9973; 5 struct Matrix 6 { 7 int m[maxn][ma
阅读全文
摘要:题意就是求第 n 个斐波那契数。 由于时间和内存限制,显然不能直接暴力解或者打表,想到用矩阵快速幂的做法。 代码如下: 1 #include <cstdio> 2 using namespace std; 3 const int maxn = 100; 4 const int mod = 10000
阅读全文
摘要:题意是在一个矩形中任给N个点,求这N个点到矩形某边的最短距离和。 一开始想到直接贪心,求出每个点到矩形一边的最短距离,但题中说到线段间不能交叉,这里好像是比较麻烦,但题目中同时说了点与点之间的横纵坐标均不相等,那么就不会发生线段交叉,直接求即可。 1 #include<bits/stdc++.h>
阅读全文
摘要:题意是说给定一个序列,能否通过任意次对部分数字 +1,对部分数字 -2的操作使得序列在满足全部非负且任意两元素的差值不超过1的前提下最小值最大,求最大值。 一开始的时候没有注意到整个序列全是非负数,还写了一步判断是否所有正数都有能力将所有负数变正,也就是说所有正数的和是否为负数和的绝对值的两倍...
阅读全文
摘要:1 #include<bits/stdc++.h> 2 #define in(a) scanf("%d",&a) 3 using namespace std; 4 5 struct nod 6 { 7 int v,next; 8 }side[405555]; 9 10 int head[200005
阅读全文
摘要:在正常读入的时候公认 scanf 比 cin 快,因为 cin 为了与 stdin 保持同步,防止两者混用时指针混乱,但同时会带来许多额外的开销,尽管可以在主函数中添加: std::ios::sync_with_stdio( false ); 来取消 cin 与 stdin 的同步,可以加快 cin
阅读全文
摘要:题意是有至多150000个双端队列,400000次简单操作,直接开会导致内存超限,所以用 STL 中的 map 和 deque ,而读入过大已经在题目中有所说明,直接用已经给出的快速读入即可。要注意的是在两个队列合并时,要用 insert 函数,直接一个一个操作会超时(自己对双端队列的 STL 还是
阅读全文
摘要:题意是在给定的线段长中挑选出能拼成三角形的最长的三条边,输出三角形的周长。先对所有边排序,从大到小,满足两较短边之和大于第三边就输出,若从未输出过就输出 -1 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #incl
阅读全文
摘要:题意是给一个 n 边形,给出沿逆时针方向分布的各顶点的坐标,求出 n 边形的重心。 求多边形重心的情况大致上有三种: 一、多边形的质量都分布在各顶点上,像是用轻杆连接成的多边形框,各顶点的坐标为Xi,Yi,质量为mi,则重心坐标为: X = ∑( xi * mi ) / ∑ mi ; Y = ∑(
阅读全文
摘要:题意是求将所有点联通所花费的最小金额,如不能完全联通,输出 -1 直接Kruskal,本题带来的一点教训是 rank 是algorithm头文件里的,直接做变量名会导致编译错误。没查到 rank 的具体用途...... 1 #include <cstdio> 2 #include <iostream
阅读全文
摘要:题意是给定一个椭圆标准方程的a,b(椭圆的长半轴长和短半轴长),在【0,b】内取一个数,则过点(0,b)且平行于x轴的直线与椭圆交于两点,再将此两点关于x轴做对称点,顺次连接此四点构成矩形,求出这些矩形周长的期望。 一开始的时候,想到所有矩形的周长和积分就是椭圆面积的两倍,但矩形的个数应该是 a +
阅读全文
摘要:题意是每组给定一个字符串,在有限查询次数内输出所要查询区间的字典序最小的子串个数。 字典序最小的子串,就是所查询区间中字典序最小的单个字符,问题就转化成了求一段区间内字典序最小的字符个数。 开始时盲目暴力,直接用桶排序的做法一段一段去求,果然t了(这种就不贴代码了)...... 然后想到先扫一遍,求
阅读全文
摘要:题意是给定两个点的位置,过原点引一条射线穿过第一个点,射线位置作为斜面位置,第二个点处令一小球自由落体,问小球能碰撞到斜面几次。 开始时想算出两次碰撞中小球沿斜面运动的距离,然后发现每一段距离会因为高度差导致动能不断变大,然后一脸懵...... 直到看了别人的题解,才想起运动分解来(这可是高中基础知
阅读全文
摘要:题意是田忌赛马的背景,双方各有n匹马,下面两行分别是田忌和齐王每匹马的速度,要求输出田忌最大的净胜场数*每场的赌金200。 开始的时候想对双方的马匹速度排序,然后比较最快的马,能胜则胜,否则用最慢的马去消耗对方,但这样存在问题:1 2 3 对 1 3 3的时候,会变成1 - 3,2 - 3,3 -
阅读全文

浙公网安备 33010602011771号