답안 #998976

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
998976 2024-06-15T02:58:46 Z vjudge1 Datum (COCI20_datum) C++17
50 / 50
349 ms 444 KB
#include<bits/stdc++.h>

using namespace std;

bool check(string s)
{
  int m[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  if(stoi(s) % 4 == 0)
    m[1] = 29;

  string MM; MM += s[1], MM += s[0];
  if(stoi(MM) <= 0 || stoi(MM) > 12)
    return false;

  int idx = stoi(MM) - 1;
  string DD; DD += s[3], DD += s[2];
  if(stoi(DD) <= 0 || stoi(DD) > m[idx])
    return false;
  return true;
}

bool compare(string a, string b)
{
  if(a.substr(3, 2) != b.substr(3, 2)) return a.substr(3, 2) < b.substr(3, 2);
  return a.substr(0, 2) < b.substr(0, 2);
  
  
}


void solve()
{
  string date;
  cin >> date;

  string Y = date.substr(6, 4);

  string ans;
  ans += Y[3], ans += Y[2], ans += '.', ans += Y[1], ans += Y[0], ans += '.';
  ans += Y, ans += '.';
  
  
  if(check(Y) && compare(date, ans))
    {
      cout << Y[3] << Y[2] << '.' << Y[1] << Y[0] << '.' << Y << ".\n";
      return;
    }

  while(true)
    {
      int s = stoi(Y) + 1;
      Y = to_string(s);
      while(Y.size() < 4)
	Y = '0' + Y;
      if(check(Y))
	break;
    }
  cout << Y[3] << Y[2] << '.' << Y[1] << Y[0] << '.' << Y << ".\n";
}

int main()
{
  int t;
  cin >> t;
  while(t--)
    solve();
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 349 ms 444 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 327 ms 344 KB Output is correct