今日学习总结

发布于:2025-02-14 ⋅ 阅读:(109) ⋅ 点赞:(0)

1.完成了P10606物理实验

2.完成了P2058海港

1.P10606

#include<stdio.h>
int min(int a,int b)
{
    return (a<b)?a:b;
}
int max(int a,int b)
{
    return (a>b)?a:b;
}
int n,m,k,a[200001];
struct node
{
    int x,y;
}b[200001];
int main()
{
    int n,m,ans=10000000000,maxx=-100000;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%d %d",&b[i].x,&b[i].y);
        maxx=max(b[i].x,maxx);
    }
    for(int i=maxx;i<=n;i++)
    {
        ans=min(ans,a[i]);
    }
    printf("%d",ans);
    return 0;
}

2.P2058

#include <stdio.h>
#include <stdlib.h>

#define MAX_N 100005
#define MAX_X 100005
#define TIME_WINDOW 86400

// 定义结构体表示乘客信息
typedef struct {
    int time;  // 到达时间
    int nationality;  // 国籍
} Passenger;

Passenger passengers[MAX_N * 3];  // 存储所有乘客信息
int country_count[MAX_X];  // 记录每个国家的乘客数量
int front = 0, rear = 0;  // 队列的头尾指针

// 统计不同国家的数量
int count_distinct_countries() {
    int distinct_count = 0;
    for (int i = 1; i < MAX_X; i++) {
        if (country_count[i] > 0) {
            distinct_count++;
        }
    }
    return distinct_count;
}

int main() {
    int n;
    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        int t, k;
        scanf("%d %d", &t, &k);

        // 移除不在时间窗口内的乘客
        while (front < rear && t - passengers[front].time > TIME_WINDOW) {
            country_count[passengers[front].nationality]--;
            front++;
        }

        // 处理当前船只的乘客
        for (int j = 0; j < k; j++) {
            int nationality;
            scanf("%d", &nationality);
            passengers[rear].time = t;
            passengers[rear].nationality = nationality;
            country_count[nationality]++;
            rear++;
        }

        // 统计不同国家的数量并输出
        int distinct_count = count_distinct_countries();
        printf("%d\n", distinct_count);
    }

    return 0;
}