ブルーブリッジカップログ統計のJava実装

タイトル:ログ統計

小さなプログラマのフォーラムを守っ明魏。今、彼はジャーナリング、N行の合計「親指」を集めました。どこで各行の形式は次のとおりです。

TSのID

Idは受信ポストTS時間の数を表し、「賞賛を。」

暁明は今ポストがされている統計情報があると思い、「ホットポストは。」ポストは、任意の期間の長さDは、Kちゃん未満を受け取った場合は、暁明は、この記事だったと思うだろう「ホット投稿。」

具体的には、引用符は、「ホットされると、Kチャンより劣ら受信)この時間(左および右閉鎖オープン間隔を注意[T、T + D)におけるTポストを満たさないためにいくつかのポイントが存在する場合ポスト。 "

ログを考えると、あなたはすべてのボブ統計はポスト番号の「ホット・ポスト」だったのに役立ちます。

[入力形式は、
最初の行は三つの整数N、D及びKを含有します
ログの次のN行、二つの整数TSとIDを含みます。

データを、1 <= K <= Nの50% <= 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消費量<1000ミリ秒

「入力してください...」不要なコンテンツ:厳密に出力の要件に従ってください、余計ないようなものを印刷します。

1つのファイルにすべてのソースコードは、デバッグを通じて、コピー元を提出します。
packageステートメントを使用しないでください。jdk1.7と上記の機能を使用しないでください。
メインクラス名でなければなりません:メイン、または他の不正なコード処理。

package 第七次模拟;

import java.util.Arrays;
import java.util.Scanner;

public class Demo12日志统计 {
	public static void main(String args[]) {
		int n, d, k; // 输入的N行每行一条日志,包含两个整数ts 和id。
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		d = sc.nextInt();
		k = sc.nextInt();
		ClickHot arr[] = new ClickHot[n];
		for (int i = 0; i < n; i++) { 
			int time = sc.nextInt();
			int id = sc.nextInt();
			arr[i] = new ClickHot(time, id); // 存放每组数字
		}
		Arrays.sort(arr); // 对其进行排序
		int parentId = arr[0].id; // 先拿到第一个id
		boolean flag =false; // 设置一个标志
		for (int i = 0; i < n; i++) {
			// 我当前得id如果有k个赞得话,就是热帖
			// 当前位置和以后的k个位置上都是此id,就有k个赞
			// 并且时间差小于d,并且没有被输出过
			if (i + k - 1 < n && arr[i + k - 1].id == parentId && arr[i + k - 1].ts - arr[i].ts < d && !flag  )

			{
				System.out.println(parentId); // 输出这个id 因为题目中只要求输出在同一个时间段有两个赞即可
				flag = true;// 这步设置变量,当后面来相同的,但是我不需要输出了,因为两个已经够了
			} else if (arr[i].id != parentId) // 这步是如果我不相同id值,那么我就把这个当前的id用我现在i数组中对应的id取代
			{
				parentId = arr[i].id; // 把先前的id替换
				flag = false; // 重新设置标志
				i = i - 1; // 因为我把上面一个设置了,此时我需要向上减一,然后再做比较,这样相当于我开始时候i不做变换没我把该取代的值取代掉
			}
		}
	}
}

class ClickHot implements Comparable<ClickHot> // 创建一个ClickHot类留存放两个每次的两个数字 一个是
												// ts 是td
{
	int ts, id;

	ClickHot(int ts, int id) // 两个变量
	{
		this.ts = ts;
		this.id = id;
	}

	@Override
	public int compareTo(ClickHot o) {
		if (id == o.id) // 先对id做比较其次id相同对ts做比较
			return ts - o.ts;
		else
			return id - o.id;
	}

}

リリース1370元の記事 ウォンの賞賛10000 + ビュー134万+

おすすめ

転載: blog.csdn.net/a1439775520/article/details/104614790