ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基础算法

2022-07-24 15:35:09  阅读:128  来源: 互联网

标签:last int top 基础 long 算法 jog include


模拟:

JOG 20200807 普及模拟赛题

 

漫步(jog.cpp/c/pas)

(1s,512MB)

【题目描述】

  有 n 组人在一条无尽的小路上漫步,每组人都有一个初始位置和速度,一组人总是会以相同的速度进行漫步,且所有人漫步的方向都相同

因为这是一条小路,所以当一个速度更快的赶上另一组速度较慢的人时,这两组会合并成一组,而合并成的这个新组的速度与原来两组中速度较慢的那组速度相同,他们会以这个速度继续往前跑。

当然跑到最后的时候,没有任何一组会与其他组再合并。这个时候还剩下几组人?

【输入格式】

第一行两个数 n,表示初始组数。

接下一行 n 行每行两个数 d、v,表示这组的初始位置和初始速度。

数据保证所有组初始位置不同,并且读入按从小到大的顺序给出。

【输出格式】

一行一个数 ans , 表示最后还剩下几组。

【样例输入】

5

0  1

1  2

2  3

3  2

6  1

【样例输出】

2

【数据范围】

对于 30 % 的数据,n ≤ 2000。

对于 100 % 的数据,n ≤ 10^5,0 ≤ d ≤ 10^9,1 ≤ v ≤ 10^9。

模拟写法:

#include<cstdio>
using namespace std;
int n,v[100005],ans=1,x;
int main(){
    freopen("jog.in","r",stdin);
    freopen("jog.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%*d%d",&v[i]);
    x=v[n];
    for(int i=n-1;i;--i)
        if(v[i]<=x) ++ans,x=v[i];
    printf("%d",ans);
    return 0;
}

 

单调队列入门:

#include <bits\stdc++.h>
using namespace std;

const int kMaxn = 111111;

int n, a[kMaxn], top = 0;

int main() {
    freopen("jog.in", "r", stdin);
    freopen("jog.out", "w", stdout);
    scanf("%d", &n);
    while (n--) {
        int t;
        scanf("%*d%d", &t);
        while (top && t < a[top]) {//维护一个单调不降的队列,最终队列里元素的个数就是答案
            --top;//例如:1 2 3 3,说明可定都追不上
        }
        a[++top] = t;
    }
    printf("%d\n", top);
    return 0;
}

 

P3111 [USACO14DEC]Cow Jog S

 

有N (1 <= N <= 100,000)头奶牛在一个单人的超长跑道上慢跑,每头牛的起点位置都不同。由于是单人跑道,所有他们之间不能相互超越。当一头速度快的奶牛追上另外一头奶牛的时候,他必须降速成同等速度。我们把这些跑走同一个位置而且同等速度的牛看成一个小组。

 

请计算T (1 <= T <= 1,000,000,000)时间后,奶牛们将分为多少小组。

 

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long n,t,last[100005];
struct cow{
    long long x,v;
}a[100005];
int main(){
    cin >> n >> t;
    for(int i=1;i<=n;i++){
        cin >> a[i].x >> a[i].v;
        last[i]=a[i].x+a[i].v*t;
    }
    long long res=1, la = last[n];//long long 
    for(int i=n-1;i>=1;i--){
        if(last[i] < la){
            la = last[i];
            res++;
        }
    }
    cout<< res<<endl;
    return 0;
}

 

标签:last,int,top,基础,long,算法,jog,include
来源: https://www.cnblogs.com/caterpillor/p/16514550.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有