__Zeze__ @ 2024-08-31 12:51:41
测评记录
#include <bits/stdc++.h>
using namespace std;
int n, a[5005], yyyy1, mm1, dd1, hh1, m1, yyyy2, mm2, dd2, hh2, m2, k, j, z = 0, l;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
scanf("%d-%d-%d-%d:%d", &yyyy1, &mm1, &dd1, &hh1, &m1);
scanf("%d-%d-%d-%d:%d", &yyyy2, &mm2, &dd2, &hh2, &m2);
k = m1 + hh1 * 60 + dd1 * (24 * 60);
j = m2 + hh2 * 60 + dd2 * (24 * 60);
for (int i = 0; i <= yyyy1; i++)
{
if ((i % 4 == 0 && i % 100 != 0) || (i % 100 == 0 && i % 400 == 0))
{
k += (366 * (24 * 60));
}
else
{
k += (365 * (24 * 60));
}
}
for (int i = 0; i <= yyyy2; i++)
{
if ((i % 4 == 0 && i % 100 != 0) || (i % 100 == 0 && i % 400 == 0))
{
j += (366 * (24 * 60));
}
else
{
j += (365 * (24 * 60));
}
}
l = 1;
while (1)
{
if (l > mm1)
{
break;
}
else if (l == 1 || l == 3 || l == 5 || l == 7 || l == 8 || l == 10 || l == 12)
{
k += (31 * (24 * 60));
}
else if (l == 2)
{
if ((yyyy1 % 4 == 0 && yyyy1 % 100 != 0) || (yyyy1 % 100 == 0 && yyyy1 % 400 == 0))
{
k += (29 * (24 * 60));
}
else
{
k += (28 * (24 * 60));
}
}
else
{
k += (30 * (24 * 60));
}
l++;
}
l = 1;
while (1)
{
if (l > mm2)
{
break;
}
else if (l == 1 || l == 3 || l == 5 || l == 7 || l == 8 || l == 10 || l == 12)
{
j += (31 * (24 * 60));
}
else if (l == 2)
{
if ((yyyy2 % 4 == 0 && yyyy2 % 100 != 0) || (yyyy2 % 100 == 0 && yyyy2 % 400 == 0))
{
j += (29 * (24 * 60));
}
else
{
j += (28 * (24 * 60));
}
}
else
{
j += (30 * (24 * 60));
}
l++;
}
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
{
k += a[i];
if (k > j)
{
break;
}
z++;
}
cout << z;
return 0;
}
by hjxxlsx @ 2024-08-31 12:58:34
这段代码看起来是用来计算小A有多少时间可以刷题的,主要依据是给定的题目列表和两个特定的时间点(即当前时间和考试时间)。首先,它读取题目数和每个题目的难度值,然后读入两个时间戳并将其转换成秒数。接着,代码处理闰年的规则来计算每个月和全年的天数差,然后逐个比较刷题时间是否超过了考试时间。
然而,在检查月份和闰年规则的部分,代码有一个循环结构,但没有正确地处理月份。特别是对于非二月的情况,它直接加上了一个固定的 302460 秒,而不是根据实际的月份天数(31、30或31)。另外,代码也没有考虑到月份的范围,可能会出现溢出的情况。
为了确保结果准确,你应该对月份和天数进行正确的迭代处理,比如使用一个 switch 语句分别对待不同月份的天数,同时检查月份值是否合法。另外,还要确保在比较之前已正确累加了所有的小时、分钟和秒。
修复这些问题后,代码才能得到正确的样例输出。如果你能提供几个具体的不正确样例,我可以帮助你分析它们的计算结果与预期输出有什么差异。
by __Zeze__ @ 2024-08-31 13:18:39
输入
100
7132
5111
638
7836
3809
1278
9578
7590
8245
5903
7611
4788
6810
1510
3564
3359
6412
996
4966
9801
5807
678
9175
9386
4146
1825
4869
9384
3639
2305
8130
1178
5102
2193
1739
1643
2965
7246
7051
2416
3779
5516
4395
3418
4869
9815
6073
5015
8501
210
3966
4891
8993
2883
5513
3775
799
9986
8190
4664
4361
241
7681
6235
7153
8032
8875
19
9254
1943
2049
8302
1848
9176
8699
6579
8112
4443
5158
8833
9849
6449
3882
2753
4101
1130
9517
4540
5516
9757
1047
3314
2938
576
8635
9440
8509
8
2596
3815
2007-02-05-00:00
2007-03-28-00:00
输出
36
by __Zeze__ @ 2024-08-31 13:19:51
我的代码输出37
by XiaoHongChong @ 2024-08-31 13:33:43
@BianChengWangZhe
#include <bits/stdc++.h>
using namespace std;
int n, a[5005], yyyy1, mm1, dd1, hh1, m1, yyyy2, mm2, dd2, hh2, m2, k, j, z = 0, l;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
scanf("%d-%d-%d-%d:%d", &yyyy1, &mm1, &dd1, &hh1, &m1);
scanf("%d-%d-%d-%d:%d", &yyyy2, &mm2, &dd2, &hh2, &m2);
k = m1 + hh1 * 60 + dd1 * (24 * 60);
j = m2 + hh2 * 60 + dd2 * (24 * 60);
for (int i = 0; i <= yyyy1; i++)
{
if ((i % 4 == 0 && i % 100 != 0) || (i % 100 == 0 && i % 400 == 0))
{
k += (366 * (24 * 60));
}
else
{
k += (365 * (24 * 60));
}
}
for (int i = 0; i <= yyyy2; i++)
{
if ((i % 4 == 0 && i % 100 != 0) || (i % 100 == 0 && i % 400 == 0))
{
j += (366 * (24 * 60));
}
else
{
j += (365 * (24 * 60));
}
}
l = 1;
while (1)
{
if (l >= mm1) //这里有问题DSFSFSFDSFDSFDSFFSDFSFSF(为了让你看见,我乱打了)
{
break;
}
else if (l == 1 || l == 3 || l == 5 || l == 7 || l == 8 || l == 10 || l == 12)
{
k += (31 * (24 * 60));
}
else if (l == 2)
{
if ((yyyy1 % 4 == 0 && yyyy1 % 100 != 0) || (yyyy1 % 100 == 0 && yyyy1 % 400 == 0))
{
k += (29 * (24 * 60));
}
else
{
k += (28 * (24 * 60));
}
}
else
{
k += (30 * (24 * 60));
}
l++;
}
l = 1;
while (1)
{
if (l >= mm2) //这里有问题DSFSFSFDSFDSFDSFFSDFSFSF(为了让你看见,我乱打了)
{
break;
}
else if (l == 1 || l == 3 || l == 5 || l == 7 || l == 8 || l == 10 || l == 12)
{
j += (31 * (24 * 60));
}
else if (l == 2)
{
if ((yyyy2 % 4 == 0 && yyyy2 % 100 != 0) || (yyyy2 % 100 == 0 && yyyy2 % 400 == 0))
{
j += (29 * (24 * 60));
}
else
{
j += (28 * (24 * 60));
}
}
else
{
j += (30 * (24 * 60));
}
l++;
}
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
{
k += a[i];
if (k > j)
{
break;
}
z++;
}
cout << z;
return 0;
}
你多计算了,比如2007-02-05-00:00,你计算成了2007-03-05-00:00,这时候2月还没有结束,所以只用计算到1月
by __Zeze__ @ 2024-08-31 13:38:25
@XiaoHongChong @hjxxlsx
谢谢两位大佬帮忙,我已AC
by hjxxlsx @ 2024-08-31 13:40:41
没事,我也是一个小白,以后多多关照,有问题请私信,谢谢
by XiaoHongChong @ 2024-08-31 13:42:00
不用谢,建议用这种方法
by __Zeze__ @ 2024-08-31 13:45:38
@hjxxlsx @XiaoHongChong
已关注
by XiaoHongChong @ 2024-08-31 13:55:49
@hjxxlsx @XiaoHongChong @BianChengWangZhe 我发现这个回复的前5个回复每相邻3回复都有我们三
by hjxxlsx @ 2024-08-31 13:56:55
嗯,是的