赞
踩
思路
这个题主要是考数学吧,它这个就是求每个时间段的差,然后找到最大的那个时间段的差,输出它这个时间段的员工id就行了,当有相同的话,我们就进行判断,是不是小于那个id就行了
- int hardestWorker(int n, int** logs, int logsSize, int* logsColSize){
- int i,max=0,t;
- int x[500][2];
- x[0][0]=logs[0][0];
- x[0][1]=logs[0][1];
- for(i=1;i<logsSize;i++)
- {
- x[i][1]=logs[i][1]-logs[i-1][1];
- x[i][0]=logs[i][0];
- }
- for(i=0;i<logsSize;i++)
- {
- if(max<x[i][1])
- {
- max=x[i][1];
- t=x[i][0];
- }
- if(max==x[i][1]){
- if(t>x[i][0])t=x[i][0];
- }
- }
- return t;
- }
二、P3367 【模板】并查集
思路
这道题就是一道基本的并查集的模板.....
代码实现
- #include<stdio.h>
- int n, m;
- int dis[10001];
-
- int heb2(int x)
- {
- if (dis[x] == x)return x;
- else
- {
- dis[x] = heb2(dis[x]);
- return dis[x];
- }
- }
-
- void find(int x, int y)
- {
- if (heb2(x) == heb2(y))printf("Y\n");
- else printf("N\n");
- }
-
- void heb1(int x, int y)
- {
- int xx, yy;
- xx = heb2(x);
- yy = heb2(y);
- if (xx != yy)dis[yy] = xx;
- }
-
- int main()
- {
- int z, x, y;
- scanf_s("%d %d", &n, &m);
- for (int i = 1; i <= n; i++)dis[i] = i;
- while (m--)
- {
- scanf_s("%d %d %d", &z, &x, &y);
- if (z == 1)heb1(x, y);
- else find(x, y);
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。