今日学习总结
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;
}