美团笔试

题目一:

小明拿到了一个数列a1, a2, ... an,小明想知道存在多少个区间 [l, r] 同时满足下列两个条件:

  1. r - l + 1 = k;
  2. 在al, al+1, ... ar中,存在一个数至少出现了 t 次。

输出满足条件的区间个数。

输入:
  输入第一行三个整数n, k, t(1 ≤ n, k, t ≤ 105);

  第二行 n 个整数,a1, a2, ... an(1 ≤ ai ≤ 105)。

输出:
  输出一个数,问题的答案。

样例输入
5 3 2
3 1 1 1 2
样例输出
3

Hint
区间[1,3]中1出现了2次,区间[2,4]中1出现了3次,区间[3,5]中1出现了2次。所以一共有3个区间满足条件。

 

解题:

#include <iostream>
#include <cstring> 

using namespace std;

int arr[100000];
int temp[100000];

int main()
{
	int k, n, t, ans = 0;
	cin >> n >> k >> t;
	for(int i = 0; i < n; ++i) {
		cin >> arr[i];
	}
	
	for(int i = 0; i < n - k + 1; ++i) {
		// 遍历[l, r]内的每一个数 
		for(int j = i; j < i + 3; ++j) 
			++temp[arr[j]];				// 就像桶 
		
		for(int m = 0; m < 100000; ++m) {
			if(temp[m] >= t)
				ans++;
		}
		memset(temp, 0, 100000);
	}
	cout << ans << endl;
}

分析:画图分析得到思路,就可以编码了。

 

题目二:

给定一张包含N个点、N-1条边的无向连通图,节点从1到N编号,每条边的长度为1。

假设你从1号节点出发并打算遍历所有节点,那么总路程至少是多少?

输入:

  第一行包含一个整数N,1 ≤ N ≤ 105

  接下来N-1行,每行包含两个整数 X 和 Y ,表示 X 号节点和 Y 号节点之间有一条边,1 ≤ X, Y ≤ N。

输出:

  总路程的最小值。

样例输入
4

1 2

1 3

3 4

样例输出
4

 

解题:

 

posted @ 2018-09-06 22:02  GGBeng  阅读(434)  评论(0编辑  收藏  举报