寒假四(1.15)

今天写了作业中的两个题目,看了网课中的指针,对指针更了解,记了四级单词。

1.

寒假四(1.15)_第1张图片

解析:首先定义了几个需要用到的数组,定义后面需要用的变量,使用循环将n个数输入,再使用一个for循环,while (a[i] >= a[q[r]] && r > 0):r 在这里可能是 q 数组的一个索引,它的初始值没有明确给出,在代码中可能假设为 0。当 a[i] 的值大于或等于 a[q[r]] 并且 r 大于 0 时,r 的值减 1。这个 while 循环的目的是在 q 数组中找到第一个元素 q[r],使得 a[q[r]] 小于 a[i]。
f[i] = q[r];:将 q[r] 的值存储到 f[i] 中,f[i] 可能用于存储与 a[i] 相关的一些信息,这里可能是 a[i] 左边第一个比它小的元素的位置。q[++r] = i;:将当前元素的索引 i 存储到 q 数组中,并将 r 的值加 1,为下一次比较做准备。

#include 
#include 
#define INF 3000005
int a[INF];
int q[INF];
int f[INF];
int main() {
	int n,r,i;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    for (i = n; i >= 1; i--) {
        while (a[i] >= a[q[r]] && r > 0) {
            r--;
        }
        f[i] = q[r];
        q[++r] = i;
    }
    for (i = 1; i <= n; i++) {
        printf("%d ", f[i]);
    }
    return 0;
}

2.寒假四(1.15)_第2张图片

解析:首先定义了几个数组,定义了后面需要用到的变量,首先定义一个循环用来输入n组,对于每一组输入的 x 和 y,它会将 y 存储到二维数组 a 的 x 行中,同时使用 sum[x] 来维护当前行存储的元素数量。在存储过程中,会检查当前元素是否小于 a[x][sum[x]],如果是,则更新 sum[x] 并增加 s 的值,以确保存储的元素是按照一定的顺序(可能是非递减)存储的。当存储的元素 y 等于 a[x][sum[x]] 时,会跳过存储操作。最后输出 s 的值,可能表示某种操作的累计次数或存储的元素总数。

#include 
#define MAX_N 300005
#define MAX_TYPE 7
int n, p, x, y, s;
int sum[MAX_TYPE];
int a[MAX_TYPE][MAX_N];
int main() {
    scanf("%d %d", &n, &p);
    int i;
    for (i = 1; i <= n; i++) {
        scanf("%d %d", &x, &y);
        while (sum[x] >= 1 && a[x][sum[x]] > y) {  
            sum[x]--;  
            s++;  
        }
        if (a[x][sum[x]] == y) continue;  
        a[x][++sum[x]] = y;  
        s++;  
    }
    printf("%d", s);  
    return 0;
}

你可能感兴趣的:(算法,数据结构)