1. 程式人生 > >2018省賽第九屆藍橋杯真題C語言B組第八題題解 日誌統計

2018省賽第九屆藍橋杯真題C語言B組第八題題解 日誌統計

標題:日誌統計



小明維護著一個程式設計師論壇。現在他收集了一份"點贊"日誌,日誌共有N行。其中每一行的格式是:


ts id  


表示在ts時刻編號id的帖子收到一個"贊"。  


現在小明想統計有哪些帖子曾經是"熱帖"。如果一個帖子曾在任意一個長度為D的時間段內收到不少於K個贊,小明就認為這個帖子曾是"熱帖"。  


具體來說,如果存在某個時刻T滿足該帖在[T, T+D)這段時間內(注意是左閉右開區間)收到不少於K個贊,該帖就曾是"熱帖"。  


給定日誌,請你幫助小明統計出所有曾是"熱帖"的帖子編號。  


【輸入格式】
第一行包含三個整數N、D和K。  
以下N行每行一條日誌,包含兩個整數ts和id。  


對於50%的資料,1 <= K <= N <= 1000  
對於100%的資料,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000  


【輸出格式】
按從小到大的順序輸出熱帖id。每個id一行。  


【輸入樣例】
7 10 2  
0 1  
0 10    
10 10  
10 1  
9 1
100 3  
100 3  


【輸出樣例】
1  
3  




資源約定:
峰值記憶體消耗(含虛擬機器) < 256M

CPU消耗  < 1000ms

思路:把每個日誌獲得的點贊資訊儲存好,按時間排序,用尺取法r在前l在後,當點贊數大於等於k,判斷時間間隔,不滿足就l往前取,r繼續往後取,直到點贊數大於等於k執行相同判斷.

程式碼:

#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
using namespace std;
typedef long long ll;
const int maxn = 1e5+5;
const double esp = 1e-7;
const int ff = 0x3f3f3f3f;
map<int,int>::iterator it;

int n,d,k;
vector<int> t[maxn];
int ans[maxn];

bool judge(int x)
{
	int len = t[x].size();
	if(len< k)
		return 0;
	
	sort(t[x].begin(),t[x].end());
	
	int l = 0,r = 0,sum = 0;
	while(l<= r&&r< len)
	{
		sum++;
		if(sum>= k)
		{
			if(t[x][r]-t[x][l]< d)//注意是小於 
				return 1;
			else
				l++,sum--;
		}
		r++;
	}
	
	return 0;
}

int main()
{
	cin>>n>>d>>k;
	
	for(int i = 1;i<= n;i++)
	{
		int ts,id;
		scanf("%d %d",&ts,&id);
		t[id].push_back(ts);
	}
	
	int cnt = 0;
	for(int i = 1;i< maxn;i++)
		if(judge(i))
			ans[++cnt] = i;
	
	for(int i = 1;i<= cnt;i++)
		printf("%d\n",ans[i]);
	
	return 0;
}

相關推薦

七屆藍橋 湊算式 C語言 B

湊算式      B      DEF A + --- + ------- = 10      C      GHI       (如果顯示有問題,可以參見【圖1.jpg】)             這個算式中A~I代表1~9的數字,不同的字母代表不同的數字。 比如: 6

2018九屆藍橋C語言B題解 全球變暖

標題:全球變暖你有一張某海域NxN畫素的照片,"."表示海洋、"#"表示陸地,如下所示:........##.....##........##...####....###........其中"上下左右"四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。  由於全

2018九屆藍橋C語言B題解 日誌統計

標題:日誌統計小明維護著一個程式設計師論壇。現在他收集了一份"點贊"日誌,日誌共有N行。其中每一行的格式是:ts id  表示在ts時刻編號id的帖子收到一個"贊"。  現在小明想統計有哪些帖子曾經是"熱帖"。如果一個帖子曾在任意一個長度為D的時間段內收到不少於K個贊,小明就

2018 藍橋 B C語言B 8 九屆藍橋 日誌統計

標題:日誌統計小明維護著一個程式設計師論壇。現在他收集了一份"點贊"日誌,日誌共有N行。其中每一行的格式是:ts id  表示在ts時刻編號id的帖子收到一個"贊"。  現在小明想統計有哪些帖子曾經是"熱帖"。如果一個帖子曾在任意一個長度為D的時間段內收到不少於K個贊,小明就

2018九屆藍橋C語言B題解 遞增三元

標題:遞增三元組給定三個整數陣列A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN],請你統計有多少個三元組(i, j, k) 滿足:1. 1 <= i, j, k <= N  2. Ai

2018九屆藍橋 C語言B 遞增三元

標題:遞增三元組 給定三個整數陣列 A = [A1, A2, … AN], B = [B1, B2, … BN], C = [C1, C2, … CN], 請你統計有多少個三元組(i, j,

2018 藍橋 B C語言B 第二 九屆藍橋+答案+解析

這段資訊是(一共10個漢字):4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0 16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 1

2018九屆藍橋 C語言B 第一

標題:第幾天 2000年的1月1日,是那一年的第1天。 那麼,2000年的5月4日,是那一年的第幾天? 注意:需要提交的是一個整數,不要填寫任何多餘內容。 答案:125 可以被四百整除,所以是

2018 藍橋 B Java語言B 3 九屆藍橋 複數冪

標題:複數冪設i為虛數單位。對於任意正整數n,(2+3i)^n 的實部和虛部都是整數。求 (2+3i)^123456 等於多少? 即(2+3i)的123456次冪,這個數字很大,要求精確表示。答案寫成 "實部±虛部i" 的形式,實部和虛部都是整數(不能用科學計數法表示),中間

七屆藍橋大賽個人賽(軟體類) C語言B 3

B組2題和A組的是重複的,so,跳過~ 題目:湊算式      B      DEF A + --- + ------- = 10      C      GHI      (如果顯示有問題,可以參見【圖1.jpg】)    這個算式中A~I代表1~9的數字,不同的字

七屆藍橋大賽個人賽(軟體類) C語言B 1

本來想繼續擼a組第三道的,然而一小時還沒弄會。。。so決定改天再弄。先做做b組的。畢竟報的b哈哈。 題目:煤球數目 有一堆煤球,堆成三角稜錐形。具體: 第一層放1個, 第二層3個(排列成三角形),

2018九屆藍橋C語言B答案第二:明碼

標題:明碼漢字的字形存在於字型檔中,即便在今天,16點陣的字型檔也仍然使用廣泛。16點陣的字型檔把每個漢字看成是16x16個畫素資訊。並把這些資訊記錄在位元組中。一個位元組可以儲存8位資訊,用32個位元組就可以存一個漢字的字形了。把每個位元組轉為2進製表示,1表示墨跡,0表示

九屆藍橋B 8

標題:日誌統計 小明維護著一個程式設計師論壇。現在他收集了一份"點贊"日誌,日誌共有N行。其中每一行的格式是: ts id   表示在ts時刻編號id的帖子收到一個"贊"。   現在小明想統計有哪些

2018九屆藍橋JAVA語言 C題解答案(全)

第九屆藍橋杯省賽JAVA語言 C組題解(全) 題1 哪天返回 小明被不明勢力劫持。後被扔到x星站再無問津。小明得知每天都有飛船飛往地球,但需要108元的船票,而他卻身無分文。 他決定在x星戰打工。好心的老闆答應包食宿,第1天給他1元錢。 並

2018九屆藍橋C/C++A(最後一

第十題 付賬問題   【題目描述】    幾個人一起出去吃飯是常有的事。但在結帳的時候,常常會出現一些爭執。    現在有 n 個人出去吃飯,他們總共消費了 S 元。其中第 i 個人帶了 ai 元。幸運的是,所有人帶的錢的總數是足夠付賬的,但現在問題來了:每個

【noip模擬】地球危機(2018九屆藍橋C/C++A 三體攻擊)

題目描述 三體人將對地球發起攻擊。為了抵禦攻擊,地球人派出了 $A × B × C$ 艘戰艦,在太 空中排成一個 $A$ 層 $B$ 行 $C$ 列的立方體。其中,第 $i$ 層第 $j$ 行第 $k$ 列的戰艦(記為戰艦 $d(i, j,k)$)的生命值為 $d_{i, j,k}$。 三體人將會對地球發

藍橋2018九屆藍橋B—乘積尾零

如下的10行資料,每行有10個整數,請你求出它們的乘積的末尾有多少個零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 56

藍橋2018九屆藍橋B—遞增三元

給定三個整數陣列 A = [A1, A2, … AN], B = [B1, B2, … BN], C = [C1, C2, … CN], 請你統計有多少個三元組(i, j, k) 滿足: 1. 1 <= i, j, k <= N 2. Ai < Bj &l

2018九屆藍橋

今天不想用腦所以就水一水部落格吧...今年的藍橋杯出的題目和之前我準備的可太不一樣了,我以為又是一堆的搜尋題,暴力杯可還行,萬萬沒想到這和我想的好像不太一樣啊,反正就是硬著頭皮做...4.1的愚人杯可還行,早早的就和我華哥一起去考場了,一進去就開始敲模板,素數篩,並查集,線段

2018九屆藍橋C/C++A 面&部分題解

首先,原題:連結: https://pan.baidu.com/s/1UzRN6Mf2Dwp0263F-MMESg 密碼: 2ryh第一題標題:分數 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每項是前一項的一半,如果一共有20項, 求這個和是