AtCoder Beginner Contest 221 D - Online games

2023-10-09 18:59

本文主要是介绍AtCoder Beginner Contest 221 D - Online games,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

在这里插入图片描述

Sample Input

3
1 2
2 3
3 1

Sample Output

Copy
2 2 0

题目大意

先输入数字N,代表有N个注册者,然后接下来有N行,每一行有两个数字 A i , B i A_i,B_i Ai,Bi A i A_i Ai代表第 i i i个使用者的第一次登录的时间, B i B_i Bi代表第 i i i个使用者连续登录的天数。输出有N个数字,第k个数字代表第k天有多少个使用者登录。
其实也就是给定n条线段, [ l i , r i ] [l_i,r_i] [li,ri]。对于每个k值,输出每个k值被多少条线段覆盖。

实现思路

假如说我们现在平面上有n条线段,然后我们有一个标记竖线record从左到右扫描

  • 每次遇到线段的左端点,record+1
  • 每次遇到线段的右端点,record-1
  • record的值就是当前k位置的结果了

但是有一种特殊的情况,假如说以最左的点为左端点的线段有多条,那么我们上面的做法就会导致结果错误,大家可以在纸上模拟一下。所以我们需要特判

  • 当多个相同的左端点是最左边的点时,我们要更新一下答案
  • 不是最左边的点,就不需要更新答案。

完整代码

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{ll n;cin >> n;vector<pair<ll, ll>> vt;ll a, b;for (int i = 0; i < n; i++){cin >> a >> b;vt.push_back(make_pair(a, 1));vt.push_back(make_pair(a + b, -1));}int now = 0;int p = 0;int ans[n + 1];memset(ans, 0, sizeof(ans));sort(vt.begin(), vt.end());int len = vt.size();for (int i = 0; i < len; i++){if (i > 0 && vt[i].first != vt[i - 1].first)ans[now] += vt[i].first - p;p = vt[i].first;now += vt[i].second;}for (int i = 1; i <= n; i++){cout << ans[i] << " ";}cout << endl;
}

题目链接

这篇关于AtCoder Beginner Contest 221 D - Online games的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/174896

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

[LeetCode] 221. Maximal Square

题:https://leetcode.com/problems/maximal-square/description/ #题目 Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing only 1’s and return its area. Example: Input:

[LeetCode] 901. Online Stock Span

题:https://leetcode.com/problems/online-stock-span/ 题目大意 不断给出元素,求当前元素开始往前的最大子串,且串中每个元素的值都小于等于 该元素。 思路 class stockPair{int price;int day;public stockPair(int price,int day){this.price = price;this.d

2015 Multi-University Training Contest 5 1009 MZL#39;s Border

MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算