专栏文章
题解:P14497 [NCPC 2025] Crochet Competition
P14497题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min8f29z
- 此快照首次捕获于
- 2025/12/01 22:15 3 个月前
- 此快照最后确认于
- 2025/12/01 22:15 3 个月前
题解
对于这类日期、时间大模拟,有经验的的人都知道一定要把每个时间转化成一个统一单位的时间,一般由题目决定。比如这道题,最小的时间单位是分钟,我们就要把开始和结束时间转化为以分钟为单位的时间进行计算。尽量不要直接用纯判断来写,细节太多,你不要问我是怎么知道的。
转化成分钟后,记录两个时间的分钟差,依次用分钟差除以一天的分钟、一小时的分钟和一分钟,每次除完取余,就得到了相差的天数、小时数和分钟数。这里还要说明几个坑点:
- 结束时间不一定大于开始时间,如果小于,就说明时间跨越了一周,要分开计算。
- 结果的输出要注意单复数,还有注意若一个时间答案为0(比如零天),不能输出这个答案,输出有效答案的数量还和答案间的连接符有关。
剩下的细节详见代码。
Code
CPP#include <bits/stdc++.h>
using namespace std;
string a1,a2,b1,b2;
int en=7*24*60,a,b,d,h,m,flag=3;
int day(string s){
if(s=="Mon") return 0;
if(s=="Tue") return 1*24*60;
if(s=="Wed") return 2*24*60;
if(s=="Thu") return 3*24*60;
if(s=="Fri") return 4*24*60;
if(s=="Sat") return 5*24*60;
if(s=="Sun") return 6*24*60;
}
int ti(string s){
int h=(s[1]-'0')+(s[0]-'0')*10;
int m=(s[4]-'0')+(s[3]-'0')*10;
return h*60+m;
}
int main(){
cin >> a1 >> a2;
cin >> b1 >> b2;
a=day(a1)+ti(a2);
b=day(b1)+ti(b2);
if(b>=a) b-=a;
else b=en-a+b;
d=b/1440;
if(d==0) flag--;//有效答案数--
b%=1440;
h=b/60;
if(h==0) flag--;
m=b%60;
if(m==0) flag--;
if(flag==0) cout << "7 days";//时间相等,说明刚好一周
if(flag==1){
if(d>0){
if(d>1) cout << d << " days";
else cout << d << " day";
}
if(h>0){
if(h>1) cout << h << " hours";
else cout << h << " hour";
}
if(m>0){
if(m>1) cout << m << " minutes";
else cout << m << " minute";
}
}
if(flag==2){
int f=0;
if(d>0){
if(d>1) cout << d << " days";
else cout << d << " day";
if(!f){//两个答案输出"and"连接,注意不要多输
cout << " and ";
f=1;
}
}
if(h>0){
if(h>1) cout << h << " hours";
else cout << h << " hour";
if(!f){
cout << " and ";
f=1;
}
}
if(m>0){
if(m>1) cout << m << " minutes";
else cout << m << " minute";
}
}
if(flag==3){
if(d>0){
if(d>1) cout << d << " days";
else cout << d << " day";
}
cout << ", ";//全部用,连接
if(h>0){
if(h>1) cout << h << " hours";
else cout << h << " hour";
}
cout << ", ";
if(m>0){
if(m>1) cout << m << " minutes";
else cout << m << " minute";
}
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...