• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
sn-genuine
博客园    首页    新随笔    联系   管理    订阅  订阅

洛谷P13893 [蓝桥杯 2023 省 C] 工作时长

P13893 [蓝桥杯 2023 省 C] 工作时长

题目描述

小蓝手里有一份 2022 年度自己的上班打卡记录文件,文件包含若干条打卡记录,每条记录的格式均为“yyyy-MM-dd HH:mm:ss”,即按照年-月-日时:分:秒的形式记录着一个时间点(采用 24 小时进制)。由于某些原因,这份文件中的时间记录并不是按照打卡的时间顺序记录的,而是被打乱了。但我们保证小蓝每次上班和下班时都会正常打卡,而且正好打卡一次,其它时候不会打卡。每一对相邻的上-下班打卡之间的时间就是小蓝本次的工作时长,例如文件内容如下的话:

  • 2022-01-01 12:00:05
  • 2022-01-02 00:20:05
  • 2022-01-01 07:58:02
  • 2022-01-01 16:01:35

表示文件中共包含了两段上下班记录,1)2022-01-01 07:58:02 ~ 2022-01-01 12:00:05,工作时长为 \(14523\) 秒;2)2022-01-01 16:01:35 ~ 2022-01-02 00:20:05,工作时长为 \(29910\) 秒;工作时长一共是 \(14523 + 29910 = 44433\) 秒。现在小蓝想知道在 2022 年度自己的工作时长一共是多少秒?

输入格式

无

输出格式

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只输出这个整数,填写多余的内容将无法得分。

输入输出样例 #1

输入 #1


输出 #1


题目链接

https://www.luogu.com.cn/problem/P13893

解题思路

  1. 按日期时间排序,每两个作差得到一次上班时间
  2. 由于并没有说出工作时间有没有跨月日,所以要考虑上
  3. 注意这里有个小彩蛋,数据条数为520

代码实现

// 模拟 
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int n=520;
ll ans;
struct node{
	int y,m,d,h,mi,s;
};
vector<node>a(n);
bool cmp(node a,node b){
	if(a.y!=b.y)return a.y<b.y;
	if(a.m!=b.m)return a.m<b.m;
	if(a.d!=b.d)return a.d<b.d;
	if(a.h!=b.h)return a.h<b.h;
	if(a.mi!=b.mi)return a.mi<b.mi;
	return a.s<b.s;
}
ll to_sec(node t){
    //计算t距离2022?01?01的总秒数
    int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    ll day=0;
    for(int i=1;i<t.m;i++) day+=month[i];
    day+=t.d-1;
    ll s=day*24*3600+t.h*3600+t.mi*60+t.s;
    return s;
}
int main()
{
	for(int i=0;i<n;i++){
		scanf("%d-%d-%d %d:%d:%d",&a[i].y,&a[i].m,&a[i].d,&a[i].h,&a[i].mi,&a[i].s);
	}
	sort(a.begin(),a.end(),cmp);
	for(int i=0;i<n;i+=2){
		ll t1=to_sec(a[i]);
		ll t2=to_sec(a[i+1]);
		ans+=t2-t1;
	}
	cout<<ans<<'\n';
	return 0;
}
posted on 2026-09-21 19:49  SobNov  阅读(13)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3