专栏文章
题解:P14497 [NCPC 2025] Crochet Competition
P14497题解参与者 5已保存评论 5
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @min88dzr
- 此快照首次捕获于
- 2025/12/01 22:10 3 个月前
- 此快照最后确认于
- 2025/12/01 22:10 3 个月前
P14497 [NCPC 2025] Crochet Competition 题解
思路
模拟。
可以将每个星期映射到一个数字,方便处理。
然后再将开始和结束时间都转为从周一 00:00 起经过的总分钟数。
如果结束时间小于等于开始时间,说明已经过了一周,要将最终计算的时间加上一周。
最后就是输出了。先忽略值为 的单位,然后处理单复数。
- 当只有 个部分的时候,直接输出;
- 当有 个部分的时候,中间用
and连接; - 当有 个部分的时候,中间用逗号分隔。
Code
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
string d1,d2;
int h1,h2,m1,m2;
char t;
map<string,int> mp {
{"Mon",0},
{"Tue",1},
{"Wed",2},
{"Thu",3},
{"Fri",4},
{"Sat",5},
{"Sun",6}
};
string print(int x) {
if (x==0) return "7 days";
int d=x/(24*60);
x%=(24*60);
int h=x/60,m=x%60;
vector<string> ans;
if (d>0) ans.push_back(to_string(d)+(d==1 ? " day" : " days"));
if (h>0) ans.push_back(to_string(h)+(h==1 ? " hour" : " hours"));
if (m>0) ans.push_back(to_string(m)+(m == 1 ? " minute" : " minutes"));
if (ans.size()==1) return ans[0];
if (ans.size()==2) return ans[0]+" and "+ans[1];
return ans[0]+", "+ans[1]+", "+ans[2];
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>d1>>h1>>t>>m1>>d2>>h2>>t>>m2;
int s=mp[d1]*24*60+h1*60+m1;
int e=mp[d2]*24*60+h2*60+m2;
if (e<=s) e+=7*24*60;
cout<<print(e-s);
return 0;
}
相关推荐
评论
共 5 条评论,欢迎与作者交流。
正在加载评论...