- 博客(16)
- 收藏
- 关注
原创 P2681 众数——题解2020.10.15
P2681 众数思路分析定义一个数组 a[ ] 存放该序列。如果 flag = 1,直接将 y 的值赋值给 a[x];如果 flag = 0,定义一个数组 b[ ] 存放区间 (x, y) 中的值,求出此区间中最小的众数;设计一个排序的函数 Sort( ) 将区间内的数从小到大排序;设计一个求最小众数的函数对区间内排好序的数进行操作;通过一个循环遍历该区间,定义一个变量 count 记录某数出现的次数,从区间内第二个数开始,如果等于前一个数,则 count 加 1,否则 count 重新开始计数
2020-10-15 21:27:48 326
原创 P1049 装箱问题——题解2020.10.14
P1049 装箱问题思路分析从 n 个物品中选出若干个装入箱子,使得箱子剩余空间最小,每个物品都有两种状态,装入或不装入,可以枚举出所有情况求出剩余最小空间;定义一个较大的变量 ans 表示剩余最小空间,遍历每一种情况与之对比,求出最小的值即为本题结果;注意事项由题可知:0 ≤ V ≤ 20000,0 < n ≤ 30;所以存储物品体积的数组定义为 w[40],ans 初始化为 20000;代码实现#include <stdio.h>int V, n, ans =
2020-10-14 21:43:57 292
原创 P1708 天然气井——题解2020.10.13
P1708 天然气井思路分析天然气管道必须从某个天然气井开始,向南或者向东建设,连接到与之对应的中转站,所以某天然气井的横坐标 x 一定小于与之对应中转站的横坐标 x1,同理,其纵坐标 y 一定大于与之对应中转站的纵坐标 y1;某天然气井到与之对应中转站连接的最短管道距离 = x1 - x + y - y1,由此推得 n 个天然气井到与之对应的 n 个中转站连接的最短管道距离 = 所有中转站与天然气井的横坐标之差 + 所有天然气井与中转站的纵坐标之差;注意事项由题可知:2 <= n
2020-10-13 20:04:24 328
原创 P1590 失踪的7——题解2020.10.12
P1590 失踪的7思路分析因为输入的数据可能很大,数据的每一位也相对独立,所以可以将 n 的每一位单独处理,大于 7 则减 1, 小于 7 则不变;因为每一位都缺失一个7,所以十进制要变成九进制,将每一位单独处理后需要乘以 9 的次方数合并相加,得到的和即为本题结果;注意事项由题可知:n ≤ 2^32-1;所以要用长整型 long long 定义变量;输入输出格式注意用 %lld;代码实现#include <stdio.h>int t, w;long long n
2020-10-12 20:13:35 409
原创 P2708 硬币翻转——题解2020.10.11
P2708 硬币翻转思路分析定义一个一维字符型数组 a[ ] 存放若干硬币的正反情况,‘1’ 表示正面,'2’表示反面;进行一次操作允许将前 n 个硬币翻面,要使操作的次数最少,每次操作须只对正反面一致的前 n 个硬币翻面,直到所有硬币一致为正面,记录下操作次数即为本题结果;使用一个循环遍历该字符数组,通过修改数组元素值的方式完成翻面操作;注意事项由题可知:硬币个数 <= 10000;所以数组定义为 a[10004];每次操作前都要判断硬币是否全为正面,每次操作后都要将循环控制变
2020-10-11 20:23:34 322
原创 P1413 坚果保龄球——题解2020.10.10
P1413 坚果保龄球思路分析由题可知棋盘大小为 6 行 60 列,游戏开始后每秒任意行的最后一列都有可能出现若干僵尸,玩家每秒可以在任意行的第一列放置若干坚果,坚果可瞬间杀死所在行的所有僵尸,僵尸每秒向左走一列,直到走到第一列再向左走游戏失败;题目要求用最少的坚果杀死所有僵尸,每个僵尸从第 60 列到第 1 列需要 59 秒,所以某行从某个僵尸出生的那一秒起到 59 秒后,期间所有改行的僵尸至少用一个坚果可以解决;可以定义一个二维数组 a[ ][ ],下标分别表示某僵尸出现的行数和出现的时间,
2020-10-10 20:01:10 561
原创 P1176 路径计数2——题解2020.10.9
P1176 路径计数2思路分析从起始点到某点的方法数等于从起始点到该点上面一个单位的点与左边一个单位的点的方法数之和;设起始点到某点的方法数为 f,该点的坐标为(x, y);可列出公式:f(x, y) = f(x - 1, y) + f(x, y - 1);定义一个二维数组 a[ ][ ],下标表示坐标,数组值存放方法数;将起始点的方法数设置为1;定义一个二维数组 b[ ][ ],下标表示坐标,数组值存放 0 或 1;1 表示该点时障碍点;将障碍点的方法数设置为 0,通过一个二层循环遍历 a[
2020-10-09 16:23:11 347
原创 P2404 自然数的拆分问题——题解2020.10.8
P2404 自然数的拆分问题思路分析傻瓜做法,因为 n<=8 ,所以可以把7中情况都列出来输出答案;注意事项注意行和列的范围,防止多输和少输;代码实现#include <stdio.h>int main(){ int n, i, j; int a[21][8] = {{1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 2, 0}, {1, 1, 1, 1, 1, 3, 0,
2020-10-08 22:42:02 154
原创 P1595 信封问题——题解2020.10.7
P1595 信封问题思路分析定义一个一维数组 f[ ] ,下标表示信封数,存放情况数;根据递推公式 f(n) = (n-1)*(f(n-1) + f(n-2)) 即可得出本题答案;注意事项由题可知:信封数 n <= 20;所以需要定义数组为 long long 类型;输出格式应该用 %lld,防止输出负数;代码实现#include <stdio.h>int main(){ int n, i; long long f[20]; scanf("%d", &am
2020-10-08 21:30:47 519
原创 P1258 小车问题——题解2020.10.6
P1258 小车问题思路分析首先车带一个人行驶x段距离,然后丢下第一个人返回带另外一个人回终点刚好与第一人同时到终点,这样才能实现时间最短;根据上述列出公式:(s-x)/a=2*(2*x/(a+b)-x/b)+(s-x)/b,化简得 x=(b+a)*s/(b+3a),时间即 x/b+(s-x)/a;注意事项由题可知:对于100%的数据,保证0 ≤ s, a, b ≤ 10^9,且 s, a, b 均为实数,所以数据都定义为 double 型;输出时须保留 6 位小数,所以用 %.6lf
2020-10-08 20:03:20 335
原创 P1540 机器翻译——题解2020.10.5
P1540 机器翻译思路分析定义两个一维数组 a[ ],b[ ] 分别存放文章的所有单词和内存中的单词;设置一个循环遍历文章的所有单词,每个单词有 2 种情况:1、内存中有这个单词;2、内存中没有这个单词;如果内存中有这个单词则不用查找或存入内存,直接进入下次循环;如果内存中没有这个单词则要到词典中查找并存入内存,如果内存未满则直接存入内存,如果内存已满则要删除内存中第一个单词再存入内存;记录下查找的次数即为本题答案;注意事项由题可知:对于10%的数据有 M=1,N≤5;对于100%
2020-10-05 17:30:28 225
原创 P3156 【深基15.例1】询问学号——题解2020.10.4
P3397 地毯思路分析定义一个以为数组 a[ ] 依次存放 n 个同学的学号;设置一个 m 次的循环输出与 m 次询问对应的 m 个学生的学号;注意事项由题可知:n <= 2*10^6,m <= 10^5,学号在 1 到 10^9 之间,所以数组定义为 long long a[2000006];最先进入教室的同学 i = 1,所以学号需要从 1 开始依次存放;代码实现#include <stdio.h>long long a[2000006];int
2020-10-04 15:20:18 575
原创 P3397 地毯——题解2020.10.3
P3397 地毯思路分析定义一个二维数组 a[ ][ ]存放每个点覆盖地毯的个数,下标表示每个点的坐标;设置一个二重循环依次遍历每个地毯覆盖的坐标范围,使地毯覆盖范围内点的值+1;打印出该二维数组 a[ ][ ]即为本题答案;注意事项由题可知:对于20%的数据,有 n≤50,m≤100;对于100%的数据,有 n,m≤1000;所以数组定义为a[1003][1003];二维数组应该初始化为 0;打印数组循环从 (1, 1) 开始,到 (n, n) 结束;代码实现#include
2020-10-04 14:40:00 280
原创 P1115 最大子段和——题解2020.10.2
P1115 最大子段和思路分析一个长度为 n 的序列有很多长短不一的连续子段,子段的位置有前后之分(即子段的第一个值的位置有前后之分)。可以定义一个数组 a[ ] 存放序列的值;数组 b[ ] 存放子段和,下标表示子段的位置,初始化为 n 个长度为 1 的子段,即与序列一样;从第二个位置开始一直到最后一个位置,如果这个子段的第一个值加上上一个位置的子段和大于它本身,则将此和赋值给该子段和,成为一个更大的新子段,公式表示为:b[ i ] = max(a[ i ], a[ i ] + b[ i - 1
2020-10-03 23:23:16 177
原创 P1208 [USACO1.3]混合牛奶 Mixing Milk——题解2020.10.1
P1208 [USACO1.3]混合牛奶 Mixing Milk思路分析求最小花费需要从最小单价的奶农那里开始采购,依次递增,直到达到乳业的需求量;可以定义两个数组 p[ ] 和 a[ ], 分别存放每个奶农的单价和产量,通过快速排序算法根据单价从小到大排序;最后可以通过一个循环计算乳业的最小花费;注意事项由题可知:对于100%的数据:0 <= n, ai <= 2*10^6, 0 ≤ m <= 5000, 0 <= pi <=1000;所以数组定义为p[5
2020-10-03 20:44:20 501
原创 P1002 过河卒——题解2020.9.30
P1002 过河卒思路分析首先不考虑马的影响,表示出从起始点(0, 0)到各个点(x, y)的路径条数;由题可知,从起始点到某点的路径条数等于从起始点到该点上面一个单位的点与左边一个单位的点的路径条数之和;设起始点到某点的路径条数为 f,该点的坐标为(x, y);可列出公式:f(x, y) = f(x - 1, y) + f(x, y - 1);定义一个二维数组 f[ ][ ],下标表示坐标,数组值存放路径条数;将马能影响到的点的路径条数设置为0,起始点的路径条数设置为1;通过一个二层循环遍历该
2020-10-01 22:11:54 130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人