我真傻,就慢慢模拟
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int run(int n)
{
if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0)
return 1;
return 0;
}
int sushu(int n)
{
if (n == 2 || n == 3 || n == 5 || n == 7 || n == 11)
return 1;
return 0;
}
int yearearn(int y, int m, int n)
{
int ans = 0;
int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
for (int i = 0; i < 12; i++)
{
if (sushu(i+1))ans += month[i] * m;
else ans += month[i] * n;
}
if (run(y))ans += m;
return ans;
}
int main()
{
int m, n;
while (scanf("%d %d", &m, &n) != EOF)
{
int x;
scanf("%d", &x);
int y1, y2, m1, m2, d1, d2;
for (int c = 0; c< x; c++)
{
int ans = 0;
scanf("%d %d %d %d %d %d", &y1, &m1, &d1, &y2, &m2, &d2);
int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (y1 == y2)
{
if (m1 == m2)
{
if (sushu(m1))ans += (d2 - d1 + 1) * m;
else ans += (d2 - d1 + 1) * n;
}
else
{
if (run(y1))month[1]++;
if (sushu(m2))ans += d2 * m;
else ans += d2 * n;
for (int i = m2 - 1; i > m1; i--)
{
if (sushu(i))ans += month[i - 1] * m;
else ans += month[i - 1] * n;
}
if (sushu(m1))
ans += (month[m1 - 1] - d1 + 1) * m;
else ans += (month[m1 - 1] - d1 + 1) * n;
}
}
else
{
if (run(y2))month[1]++;
for (int i = 1; i < m2 ; i++)
{
if (sushu(i))ans += month[i-1] * m;
else ans += month[i-1] * n;
}
if (sushu(m2))ans += d2 * m;
else ans += d2 * n;
if (run(y2))month[1]--;
for (int i = y2 - 1; i > y1; i--)
{
ans += yearearn(i, m, n);
}
if (run(y1))month[1]++;
for (int i = 12; i > m1; i--)
{
if (sushu(i))ans += month[i - 1] * m;
else ans += month[i - 1] * n;
}
if (sushu(m1))ans += (month[m1 - 1] - d1 + 1) * m;
else ans += (month[m1 - 1] - d1 + 1) * n;
}
printf("%d\n", ans);
}
}
return 0;
}