首页 > 其他分享 >2023.2.22AcWing蓝桥杯集训·每日一题

2023.2.22AcWing蓝桥杯集训·每日一题

时间:2023-02-22 21:11:47浏览次数:50  
标签:10 logs int ++ 蓝桥 2023.2 热帖 权值 22AcWing

知识点为双指针。

AcWing 1238. 日志统计(蓝桥杯辅导课)

题目描述

小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 \(N\) 行。

其中每一行的格式是:

ts id

表示在 \(ts\) 时刻编号 \(id\) 的帖子收到一个”赞”。

现在小明想统计有哪些帖子曾经是”热帖”。

如果一个帖子曾在任意一个长度为 \(D\) 的时间段内收到不少于 \(K\) 个赞,小明就认为这个帖子曾是”热帖”。

具体来说,如果存在某个时刻 \(T\) 满足该帖在 \([T,T+D)\) 这段时间内(注意是左闭右开区间)收到不少于 \(K\) 个赞,该帖就曾是”热帖”。

给定日志,请你帮助小明统计出所有曾是”热帖”的帖子编号。

输入格式

第一行包含三个整数 \(N,D,K\)。

以下 \(N\) 行每行一条日志,包含两个整数 \(ts\) 和 \(id\)。

输出格式

按从小到大的顺序输出热帖 \(id\)。

每个 \(id\) 占一行。

数据范围

\(1≤K≤N≤10^5,\)
\(0≤ts,id≤10^5,\)
\(1≤D≤10000\)

输入样例

7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3

输出样例

1
3

解题思路

双指针+滑动窗口。我们维护一个区间长度为 \(D\) 的区间,统计该区间内的“热帖”,利用 \(cnt\) 数组,实现点赞数的更新,这个技巧在AcWing 799. 最长连续不重复子序列这道题中也有使用。

C++代码

#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
typedef pair<int, int> PII;
#define x first
#define y second

int n, d, k;
PII logs[N];
int cnt[N];
bool st[N];

int main()
{
    scanf("%d%d%d", &n, &d, &k);
    for (int i = 0; i < n; i ++) scanf("%d%d", &logs[i].x, &logs[i].y);
    sort(logs, logs + n);
    for (int i = 0, j = 0; i < n; i ++)
    {
        // printf("%d %d\n", logs[i].x, logs[i].y);
        cnt[logs[i].y] ++; // 点赞数+1
        while (logs[i].x - logs[j].x >= d) // 时间间隔>=d
        {
            cnt[logs[j].y] --;
            j ++;
        }
        if (cnt[logs[i].y] >= k) st[logs[i].y] = true;
    }
    for (int i = 0; i < N; i ++)
        if (st[i])
            printf("%d\n", i);
    return 0;
}

AcWing 1240. 完全二叉树的权值(蓝桥杯辅导课)

题目描述

给定一棵包含 \(N\) 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 \(A_1,A_2,...,A_N\),如下图所示:

image

现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?

如果有多个深度的权值和同为最大,请你输出其中最小的深度。

注:根的深度是 \(1\)。

输入格式

第一行包含一个整数 \(N\)。

第二行包含 \(N\) 个整数 \(A_1,A_2,...,A_N\)。

输出格式

输出一个整数代表答案。

数据范围

\(1≤N≤10^5,\)
\(−10^5≤A_i≤10^5\)

输入样例

7
1 6 5 4 3 2 1

输出样例

2

解题思路

题目要求我们得到层的权值和最小的层数,那么最直接的一个思路,计算每一层的和,比较得到最小层的层数。数据范围是 \(N=10^5\),那么最多有 \(logN\) 层,每个节点只遍历一次,算法的时间复杂度应为 \(O(NlogN)\)。

C++代码

#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
typedef long long LL;

int n, a[N];
vector<int> v[15];

int get(int x)
{
    int ans = 1;
    for(int i = 1; i <= x; i ++)
        ans *= 2;
    return ans;
}

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++)
        scanf("%d", &a[i]);
    int i, j;
    for(i = 1, j = 1; i <= n;)
    {
        while(i <= n && i <= get(j) - 1 && i >= get(j - 1))
        {
            v[j].push_back(a[i ++]);
        }
        j ++;
    }
    //cout << i << " " << j << endl;
    j --;
    LL sum = -1e18, ans = 0;
    for(int k = 1; k <= j; k ++)
    {
        LL cnt = 0, len = v[k].size();
        for(int t = 0; t < len; t ++)
            cnt += v[k][t];
        if(sum < cnt)
        {
            sum = cnt;
            ans = k;
        }
        //cout << len << endl;
    }
    printf("%lld\n", ans);
    return 0;
}

标签:10,logs,int,++,蓝桥,2023.2,热帖,权值,22AcWing
From: https://www.cnblogs.com/Cocoicobird/p/17145860.html

相关文章

  • 2023.2.22每日总结
    从昨天学习json添加依赖包的时候就发现的问题——无法解alibaba的依赖包,maven的setting.xml设置里也配置了阿里的镜像仓库,于今天解决 ......
  • 蓝桥杯学习笔记(一)
    蓝桥杯学习笔记(一)零碎知识点:输入输出的数据<105使用cincout输入输出的数据>=105使用scanfprintf220≈106 216=65536 215=32268 263≈1018头文件大......
  • 2023.2.22学习记录
    今天学习了Android开发的文本控件的初步,以及像素的知识文本的字体大小DP,与sp的差别。xml,java,<string>等的了解。1,<resources><stringname="app_name">MyApplicati......
  • 2023.2.22软件工程学习日报
      所花时间:代码量:博客量:3了解到的知识点:今天首先在安装了AndroidStudio的基础上了解了以下几点内容1、Android的项目架构(某个文件夹具体是干什么的)2、自带的SQLi......
  • new bing 申请(2023.2.22成功)
    记录备忘环境:万维网(us)微软账号步骤:访问bing.com/new,先尝试点击加入候补名单,如果出现出错了,请重试,继续以下步骤根据brant_liu在微软社区的回答,需......
  • 蓝桥杯2022年第十三届省赛真题-数组切分
    已知一个长度为N的数组:A1,A2,A3,...AN 恰好是1∼N的一个排列。现在要求你将A数组切分成若干个(最少一个,最多N个)连续的子数组,并且每个子数组中包含的整数......
  • 每日训练-2023.2.21
    还是很有必要进行每日训练的,之前摆一摆倒还好,组队之后比赛量肯定会上去,再不练一练到时候只能天天拖队友后腿了(悲这学期的学业压力也不小,尤其是我非常不擅长物理+实验,模电......
  • 2023.2.21——软件工程日报
    所花时间(包括上课):8.5h代码量(行):0行博客量(篇):2篇今天,上午上了英语提高与数据库原理及应用教程,下午上了python,晚上学习了数学建模。我了解到的知识点:1.数据库设置数据类型......
  • 2023.2.21周二每日总结
    今天依旧在钻研增删改查里面的增,白天上课到时候听了数据库原理老师的课,对数据库的操作有了更进一步的认知,逐渐明白如何往数据库中添加和修改信息,但是这和从网页录入的信......
  • 2023.2.21
    今天下午是模拟赛,机房里两位大佬AK了,咱是爆零。所以好好学习天天向上继续努力......今日比赛题目:(洛谷)P1521求逆序对(进阶版是P2513逆序对数列)、P2511木棍分割、石子......